2008-12-01 4 views
4

Существует исполняемый файл, который динамически связан с количеством общих объектов. Как я могу определить, к какому из них принадлежит некоторый символ (импортированный в исполняемый файл)?GCC/ELF - откуда приходит мой символ?

Если есть более чем одна возможность, могу ли я усилить ld и посмотреть, откуда она берется?

+0

См. Этот вопрос: http://stackoverflow.com/questions/290799/how-can-i-find-out-which-library-is-home-to-a-given-object. – 2008-12-01 18:09:11

ответ

5

Как и Чарли, «ldd» может сделать то, что вы ищете.

3

Если вы можете переделать исполняемый файл, самый простой способ узнать, откуда берутся ссылки и определения, используется флаг ld-y. Например:.

$ cat t.c 
int main() { printf("Hello\n"); return 0; } 

$ gcc t.c -Wl,-yprintf 
/lib/libc.so.6: definition of printf 

Если вы не можете перелинковать исполняемый файл, а затем запустить ldd на него, а затем запустить 'nm -D' на всех библиотеках, перечисленных в порядке, и grep для символа вы заинтересованы в

1
$LD_DEBUG=bindings my_program 

Это будет печатать все привязки символов на консоли.