GCC / ELF - откуда мой символ? - PullRequest
4 голосов
/ 01 декабря 2008

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

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

Ответы [ 4 ]

5 голосов
/ 01 декабря 2008

Как и те, что упоминал Чарли, " ldd " может сделать то, что вы ищете.

5 голосов
/ 01 декабря 2008

Посмотрите на nm (1) , objdump (1) и elfdump (1) .

3 голосов
/ 04 декабря 2008

Если вы можете связать исполняемый файл, самый простой способ выяснить, откуда берутся ссылки и определения, - использовать флаг 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 голос
/ 17 февраля 2009
$LD_DEBUG=bindings my_program

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

...