perl で fork をよぶ方法(linux x86 編)
use DynaLoader; my $s = join('', "\x31\xc0", # xor %eax,%eax "\xb0\x02", # mov $0x2,%al "\xcd\x80", # int $0x80 "\xc3", # ret ); DynaLoader::dl_install_xsub( 'myfork', unpack("L",pack("P*",$s)) ); &myfork;
linux で perl から fork をよぶにはこうすればいいという話。
dl_install_xsub をこのように呼ぶと、任意の x86 コードが実行できるので、好きなように system call などを呼ぶとよい。
linux でシステムコールをよぶには、eax レジスタにシステムコール番号をいれて、ebx レジスタなどに引数をいれて、int 80h をよべばいい。
as hoge.s && ld -s -o foo a.out && ./foo
などとすると、ためしにうごかしたりできるが、この途中の a.out を objdump -D すると、ディスアセンブルされるので、これをコピペして、つっこんだりしていた。
たぶんもうちょいうまいやりかたがあるのだとおもう。
なおこれは fork などが制限されている perl での場合で、通常には fork() builtin function をつかえばよい。