Если ваш исполняемый не раздели, то nm
command (см также Linux manpage for nm
) будет делать то, что вы хотите - он печатает таблицу символов имен/адресов/типов. Он имеет несколько вариантов вывода; на Linux, форматирование «sysv» -типов приближается к тому, чтобы дать вам то, что вы хотите. Пример:
$ nm -f sysv /bin/perl
Symbols from /bin/perl:
Name Value Class Type Size Line Section
Bases.3 |000000000813019c| d | OBJECT|0000000000000014| |.data
F0convert |00000000080c6905| t | FUNC|00000000000000c6| |.text
PL_AMG_names |0000000008137c80| D | OBJECT|0000000000000108| |.data
PL_No |0000000008137904| D | OBJECT|0000000000000004| |.data
PL_Yes |0000000008137900| D | OBJECT|0000000000000004| |.data
[ ... ]
PL_curinterp |0000000008138e88| B | OBJECT|0000000000000004| |.bss
PL_do_undump |0000000008137910| D | OBJECT|0000000000000001| |.data
PL_dollarzero_mutex |0000000008138e58| B | OBJECT|0000000000000018| |.bss
PL_fold |000000000812c020| R | OBJECT|0000000000000100| |.rodata
PL_fold_locale |0000000008135c80| D | OBJECT|0000000000000100| |.data
PL_force_link_funcs |0000000008137da0| D | OBJECT|00000000000006c8| |.data
PL_freq |000000000812c120| R | OBJECT|0000000000000100| |.rodata
PL_hexdigit |0000000008137908| D | OBJECT|0000000000000004| |.data
PL_memory_wrap |000000000812bfa3| R | OBJECT|0000000000000013| |.rodata
[ ... ]
PerlIO_setpos |0000000008112134| T | FUNC|00000000000000a6| |.text
PerlIO_sprintf |00000000081122ee| T | FUNC|000000000000002a| |.text
PerlIO_stdio |0000000008138720| D | OBJECT|0000000000000070| |.data
PerlIO_stdoutf |0000000008112066| T | FUNC|000000000000003b| |.text
[ ... ]
Если вы создаете файл объекта из C исходный код:
int x = 10;
и запустить что через nm
, это дает:
$ nm -f sysv xxxx.o
Symbols from xxxx.o:
Name Value Class Type Size Line Section
x |0000000000000000| D | OBJECT|0000000000000004| |.data
Обратите внимание на Value
поле сообщил им является адрес указанного символа, а не содержимого переменной.
Если вы запустите на нем strip
, эта таблица будет удалена, хотя и все nm
сообщает, что вы не являетесь символом.
Почему вы спрашиваете об этом? Почему это важно для вас? Вы могли бы использовать 'nm' и' objdump' (возможно, написать некоторый 'awk', чтобы объединить их вывод). –
@BasileStarynkevitch: Есть ли опция в 'objdump', которая показывает вывод, который я хочу, как упоминалось выше? –
Не в вашем формате, но 'objdump -t -h' может быть полезным (возможно, для объединения с выводом' nm'). Но вы действительно должны объяснить, почему вы этого хотите. Включение глобального в '.bss' или в' .data' является IMHO - деталью реализации цепочки построения. –