z80oolong @z80oolong@qiitadon.com
フォロー

現在うだうだ中。現在自宅にて明日の予定について思案中。

標準 C ライブラリ関数において dlsym(3) 関数で動的ライブラリ内の関数のポインタを取得する時、まれに dlsym(3) 関数の値が誤ったポインタを返却してエラーを返さない現象が起きることがあります。

この時、返却されたポインタを用いて関数を呼び出すと、当然にプロセスが Segmentation Fault を起こす不具合を起こします。

これを防ぐ手法として、 glibc のみに実装されている標準ライブラリ関数の dladdr(3) を用いて関数のポインタから関数名の逆引きを試みる手法が考えられます。

typedef struct {
const char *dli_fname;
void *dli_fbase;
const char *dli_sname;
void *dli_saddr;
} Dl_info;

int dladdr(void *addr, Dl_info *info);

· Web · 0 · 0