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 はどこへ。

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