mydl
.o をロードするダイナミックローダを書いてみました。
http://shinh.skr.jp/koneta/mydl.tgz
int add(int x, int y) { return x+y; }
みたいなコードを gcc -c add.c とコンパイルしておき、
#include <stdio.h> #include "mydl.h" int main() { void* handle = mydlopen("add.o"); int (*fp) (int, int) = mydlsym(handle, "add"); char* p = (char*)fp; printf("add (%p):\n", fp); while (*p != (char)0xc3) { printf("%02x ", (*p++) & 0xff); } printf("c3\n"); printf("2+3=%d\n", fp(2, 3)); mydlclose(handle); return 0; }
てな感じでやってやると出力が、
add (0x4001c034): 55 89 e5 8b 45 0c 03 45 08 c9 c3 2+3=5
などと。1行目が関数の置かれてる位置、2行目は関数の開始から ret までのダンプ、3行目が 2 と 3 を引数に関数を呼んでみたところ。
一応再配置もやってますが全然完全では無い気がします。
ObjC はどこへ。