MacOSX で linux バイナリでも動かしてみる

http://homepage3.nifty.com/mogami/diary/d0708.html#071

このへんとか見てて、そういえばこの MacOSXx86 だった…! と思い出しました。一度思い出してみると、 linuxdmd が動かんのがとても奇妙に思えてきたのですが、でまぁそのへんの違いを再度吸収してる 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 の略です。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h