MacOSX で linux バイナリでも動かしてみる
http://homepage3.nifty.com/mogami/diary/d0708.html#071
このへんとか見てて、そういえばこの MacOSX は x86 だった…! と思い出しました。一度思い出してみると、 linux の dmd が動かんのがとても奇妙に思えてきたのですが、でまぁそのへんの違いを再度吸収してる LL というのはえらいなぁと思って少し LL を作ってみました。
http://shinh.skr.jp/binary/ll.tgz
なんか以下みたいな感じ。
i@um ~/wrk/ll> uname -a Darwin um.local 8.10.1 Darwin Kernel Version 8.10.1: Wed May 23 16:33:00 PDT 2007; root:xnu-792.22.5~1/RELEASE_I386 i386 i386 i@um ~/wrk/ll> ./hello zsh: exec format error: ./hello i@um ~/wrk/ll> ./objdump -f hello hello: file format elf32-i386 architecture: i386, flags 0x00000112: EXEC_P, HAS_SYMS, D_PAGED start address 0x080482b0 i@um ~/wrk/ll> ./ll.rb hello loading programs num=2 load: 00000000 08048000-0804845c 0000045c 0000045c r-x load: 0000045c 0804945c-08049564 00000104 00000108 rw- relocating addresses num=4 failed to load: __gmon_start__ reloc: puts(0x9001caa0) 0x8049548 reloc: __libc_start_main(0x1843) 0x804954c failed to load: __gmon_start__ executing _start(0x80482b0) OK, invoking main(0x8048354). good luck hello world
当初の目的だった dmd はうまく動いてないんだけど、 Brainf*ck インタプリタは動いていて、 Brainf*ck はチューリング完全らしいので、まぁ実用上問題は無いんじゃないかと思う。カレンダー表示できたし。ウソ、 dmd 動くくらいまではなんとかしたいけど、 libc がマクロに満ちあふれてるからもっとうまい方針考えた方がいいかなぁとかも。
ちなみに、 LL は linux loader の略です。