IT Junk Box
- March, 2009 -
2009.03.04(水)
■ objconv って何? [PC]
Agner Fog: Object file converter
 ELF や COFF なんかの .o とか .obj のファイルを相互変換できるそうで、これから
	試してみます。面白そうな。ソースの中にある build.sh というファイルを見るとほ
	とんどコメントで、1行だけおまじないがありました。
> g++ -o objconv -O2 *.cppなんとも大胆な作りです。LLVM でこしらえてみました。
> llvm-g++ -o objconv -O2 *.cppで、FreeBSD の Hello, world! なんですが、JWasm 用に作ったものを
    .386
    .model flat
    .code
 
_start:
                push   sizeof msg
                push   offset msg
                push   1               ; stdout
                mov    eax, 4          ; sys_write
                push   0               ; dummy argument
                int    080h
 
                xor    eax, eax        ; sys_exit
                int    080h
 
    .data
msg             db   'Hello World !!', 0ah
    end _startMASM でアセンブルして、objconv で ELF にしてみたらあっさり動きました。
> wine ml -nologo -coff -c -Fohello.obj hello.asm
> objconv -felf32 hello.obj hello.o
> ld -s -o hello hello.o
> ./hello
Hello World !!でも、COFF じゃなく OMF だと変換に失敗するなぁ。マニュアルを見ると 32bit の
	 OMF もサポートしてるみたいなんだけど、変換できない場合もあるようです。
	■ LLVM Compiler 2.5 公開 [PC]
 LLVM Compiler の新しいバージョンが、公開されたようです。 Windows 版は、Wine
	だと動かないんだけど、何か見落としたのかな。
2009.03.06(金)
■ Open Watcom C/C++ と doscmd [FreeBSD] [DOS]
Open Watcom C/C++ でこしらえたものを doscmd で実行するとこんなエラーが出て
Unknown interrupt 21 function 63
Unknown interrupt 21 function 65調べてみると DBCS ベクター情報の取得とか拡張国別情報の取得のコードがあるよう
	です。Open Watcom C/C++ の作ったマップファイルにそれらしい __mbinit_ というの
	があって Open Watcom C/C++ のソースを探してみると bld/clib/mbyte/c/mbinit.c と
	いうファイルに int __mbinit( int codepage ) があって原因のコードがありました。
	ファイルが大きいと思ったらこんなものまで付いてくるんですねぇ。
ってことで、doscmd のパッチをこしらえてみました。こちらに置いておきます。
[ 3月 7日追記]
	  doscmd のパッチを修正しました。Open Watcom C/C++ と違うパターンでもそれなり
	のデータを返すようにしました。
2009.03.08(日)
■ nask のファイルを objconv で変換してみた [PC]
 objconv というのは、 ELF や COFF なんかの .o とか .obj のファイルを相互変換
	できるツールで、nask の COFF ファイルでも試してみました。
FreeBSD の Hello, world! なんですが、nask 用にこしらえたものを
[FORMAT "WCOFF"]
[INSTRSET "i386p"]
[OPTIMIZE 1]
[OPTION 1]
[BITS 32]
[FILE 'hellof.nask']
 
global _start
 
[SECTION .data]
 
        ALIGNB  4
msg         db   'Hello World !!', 0x0A
msglen      equ  $ - msg
 
[SECTION .text]
_start:
        push   msglen
        push   msg
        push   1               ; stdout
        mov    eax, 4          ; sys_write
        push   0               ; dummy argument
        int    080h
        xor    eax, eax        ; sys_exit
        int    080h
	NASKでアセンブルして、objconv で ELF にして
> nask hello.nask hello.obj
> objconv -felf32 hello.obj
> ld -s -o hello hello.o起動したらすんなりと動きました。
> ./hello
Hello World !!2009.03.10(火)
■ FreeBSD の Portsnap を使ってみた [FreeBSD]
 FreeBSD ハンドブックの Ports Collection の利用に FreeBSD 6 になって追加され
	た 「Portsnap を利用する方法」が、書かれていたので試してみました。
ハンドブックでは、ports の sysutils に含まれてるようになっていますが、最近の
	リリースでは標準でインストールされています。/usr/sbin/portsnap というファイル
	を見るとシェル・スクリプトでした。初回は、
# portsnap fetchというおまじないでファイルを持ってきて
# portsnap extractというおまじないでファイルを展開するようです。2回めからは、
# portsnap fetch updateだけでいいみたいです。今のところサーバーが海外にしかないようなので、転送量が
	多いようだったらしばらく使わないかもしれません。1回めは、55MB でした。
本家の FreeBSD Handbook の方は、既に修正されてました。
	■ 新しいブートローダーだとか [FreeBSD] [DragonFly BSD]
 FreeBSD と DragonFly BSD 用の新しいブートローダーだそうで、First public test
	って書いてるんで様子見した方がいいかも。
2009.03.11(水)
■ FASM のバージョンアップで -d オプションが無くなった [PC]
FASM で暫く前に追加になった -d オプションが、無くなったようです。
version 1.67.24 (Dec 03, 2007)
[+] Added "-d" option to allow predefining symbolic constants from command line.
最新のバージョンだと
version 1.67.35 (Mar 09, 2009)
[-] Some internal code size reductions.
[-] Discontinued "-d" switch implementation.
ということに。悲しぃ。
2009.03.13(金)
■ IronRuby だそうで [Ruby] [Windows]
 丁稚な日々の using によると IronRuby も配布されてるようで、まだアルファ版の
	ようですが、気の早い方はもう試してるんですねぇ。
ってことで、アルファ版を手に入れましたが、.NET な環境をどこに作ろうかな!?
	■ JWasm が SourceForge.net のプロジェクトに [PC]
 MASM32 のフォーラムを見ると japheth さんが、JWasm を SourceForge.net に移した
	ようです。で、フォーラムのモデレータも辞めてしまったようです。
[03月17日追記]
	 でも、japheth さん、ここでフォーラムの運営をやってるなぁ。
2009.03.15(日)
■ 求めるもの違い [Python] [Ruby]
思っているよりもずっとずっと人生は短い。: Pythonな人とRubyな人の違い
両者は、どちらの方が良いか、みたいな話ではなく、あくまで適性というか、求めるもの、目指すところの違いの話で。たぶん二人とも同じ光景を見てるんだと思うのですが、私が「1.8.6もいいけど、やっぱり1.9.1もいいよね」と表現するところを、柴田さんなら「1.9.1もいいけど、やっぱり1.8.6もいいよね」と表現するんだろうなあ、と。でも、私の知っているRubyistなら、後者ではなく前者の表現を好みそうな気がするのです。同様に、Pythonな人の間では「2.6もいいけど、やっぱり3.0もいいよね」という言葉には、何かしら違和感を感じるのかもしれません。
そんな感じもするような。
■ マスメディアの世論誘導 [メディア] [世間]
植草一秀の『知られざる真実』: マスメディア総動員の情報操作・国策捜査との激闘
と、国策捜査で逮捕された植草氏にリンクしてみる。
大手マスコミは、国策捜査を垂れ流すばかりで郵政外資化の報道を流さないからなぁ。
	酷いもんだ。世論誘導に乗せられやすい人は、ご注意を。
2009.03.16(月)
■ Debian 5.0 lenny をインストール [Linux]
■ DOS と Linux で Hello World! [DOS] [Linux]
Fun With Linux Assembly Language: dual.asm
 こちらにある dual.asm というファイルをアセンブルすると DOS でも Linux でも
	実行できるファイルを作ることができます。実際に試してみましたが、何も問題無く
	動きました。また、ELF フォーマットは、 8番目のデータで OS を区別しています。
	Linux の実行ファイルは 3 で FreeBSD だと 9 になっているので、少し書き換える
	と他の OS でも動かせます。
Linux のばやい
0000-0000  7f 45 4c 46 01 01 01 03  00 00 00 00 00 00 00 00FreeBSD のばやい
0000-0000  7f 45 4c 46 01 01 01 09  00 00 00 00 00 00 00 00dual.asm を参考にしてマクロを作って幾つか ELF32 の実行ファイルを作ってみました
	が、セクションが1つの場合しか正常な実行ファイルを作れないようです。
 FASM でも試してみましたが、ELF32 の実行ファイルを作る場合、セクションを指定する
	とエラーになって実行ファイルを作れませんでした。
2009.03.19(木)
■ ruby 1.9.1 を使って [ruby] [nDiary]
 そろそろ、新しい ruby にも慣れとかないと浦島太郎になりそうなので練習を兼ねて
	のとやさんの nDiary を ruby 1.9.1 で動くようにしてみました。といっても、PB memo 
	の Ruby 1.9.1 への移行挑戦の記録 を参考にさせてもらったのですが。
で、作業としては、ディレクトリー filter/, lib/, plugin/ にあるファイルの1行め
	に euc-jp の magic comment を追加して
# -*- coding: euc-jp -*-ndiary-lib.rb のファイルを変更して
     246 行
変更前:   require 'ftools'
変更後:   require 'fileutils'
  
     535 行
変更前:       text.each("\n\n"){ |line|
変更後:       text.split("\n\n").each { |line|
  
     598 行
変更前:      File::makedirs(File::dirname(filename))
変更後:      FileUtils.mkdir_p(File.dirname(filename))1行めに euc-jp の magic comment を追加したら動いてしまったような。
2009.03.20(金)
■ doscmd より Bochs や Qemu だそうで [FreeBSD] [DOS]
 doscmd のパッチを本家に送ってみました。そしたら、「Bochs や Qemu を使った方
	がいいよ。」とお返事がありました。う〜ん、シェルスクリプトで動かせるから使って
	るんだけど。
このまま放置しておくと検索サービスで見つからないので、こちらにも書いておきまし
	た。また、パッチのファイルに動作確認用の DOS のプログラムを追加しておきました。
2009.03.21(土)
■ シェバング (shebang) の違いだとか [FreeBSD] [Linux]
 詳しいことは、68user さんの説明にお任せするとして、久し振りに Debian を使
	ってるんですが、FreeBSD で使っていたスクリプトが、そのまま動かないという現実
	に直面しています。まぁ、たいした数では、ないんですが。FreeBSD だと引数を渡す
	のに env コマンドに -S オプションを使ったりしますが、
#!/usr/bin/env -S ruby19 -KeLinux だと、そんな使い方をしないってことで、env コマンドの代わりに使える exe 
	というツールも公開されてるようですが、数も少ないので必要に応じて書き換えよう
	かと考えています。
で、改めてスクリプトを見直すとこんな1行めでも動いていたことに気付きました。
	そうです、シェバング (#!) じゃなかったのにスクリプトが動いていたんです。
#/bin/sh実は、この nDiary の変換と更新に使っていたスクリプトだったりします。
2009.03.28(土)
■ Tomahawk Desktop だとか [FreeBSD] [Linux]
gihyo.jp: FreeBSD Daily Topics: Tomahawk Desktop OS - FreeBSDベースへ転身
Tomahawk Computersが開発している『Tomahawk Desktop』がLinuxベース
からFreeBSDベースへ切り替わりました。
Linux のライセンスについては、こちらでも話題になってたような。
 @IT: 「GPLはもう要らない」、OSSの伝道師が異説
	 dotCOMmie's Blog: Eric S. Raymond speaks heresy.
まぁ、それはともかくそろそろ PC-BSD を使ってもいい頃かも!?
2009.03.30(月)
■ JWasm で ELF32 の実行ファイルを [FreeBSD] [Linux]
 JWasm のマクロのこと等で Japheth さんに連絡したら、気に入ってもらえたようで
	本体の方で対応することになりそうです。ということで、次のバージョンが出るのは、
	また先になってしまうなぁ。たははっ。
で、新しい JWasm v1.95pre 版なんですが、DOS のリアルモードで動くバージョンも
	追加されてました。
フォーマットの資料を検索して調べるより Open Watcom に置いてある資料 を見た方が
	早かったような。
2009.03.31(火)
■ ELF フォーマットの番号って? [FreeBSD] [NetBSD] [OpenBSD] [Linux]
FreeBSD の /usr/include/sys/elf_common.h を見ると下記のようになってます。
#define ELFOSABI_NONE       0   /* UNIX System V ABI */
#define ELFOSABI_HPUX       1   /* HP-UX operating system */
#define ELFOSABI_NETBSD     2   /* NetBSD */
#define ELFOSABI_LINUX      3   /* GNU/Linux */
#define ELFOSABI_HURD       4   /* GNU/Hurd */
#define ELFOSABI_86OPEN     5   /* 86Open common IA32 ABI */
#define ELFOSABI_SOLARIS    6   /* Solaris */
#define ELFOSABI_AIX        7   /* AIX */
#define ELFOSABI_IRIX       8   /* IRIX */
#define ELFOSABI_FREEBSD    9   /* FreeBSD */
#define ELFOSABI_TRU64      10  /* TRU64 UNIX */
#define ELFOSABI_MODESTO    11  /* Novell Modesto */
#define ELFOSABI_OPENBSD    12  /* OpenBSD */
#define ELFOSABI_OPENVMS    13  /* Open VMS */
#define ELFOSABI_NSK        14  /* HP Non-Stop Kernel */
#define ELFOSABI_ARM        97  /* ARM */
#define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */で、NetBSD とか OpenBSD のバイナリファイルを幾つか持ってきて調べてみると
0000-0000  7f 45 4c 46 01 01 01 00  00 00 00 00 00 00 00 00全部8番めのデータは、"00" でした。あれっ、何で?