objdump и разрешающая связь локальных вызовов функций? - PullRequest
6 голосов
/ 24 января 2012

Если я запускаю objdump -d для файла (linux amd64) .o, вызовы функций отображаются без разрешения времени ссылки.Пример:

  90:   66 89 44 24 1c          mov    %ax,0x1c(%rsp)
  95:   44 89 74 24 10          mov    %r14d,0x10(%rsp)
  9a:   e8 00 00 00 00          callq  9f <foo+0x9f>
  9f:   83 f8 ff                cmp    $0xffffffffffffffff,%eax
  a2:   74 5e                   je     102 <foo+0x102>

Ветвь внутри функции отображается правильно, но callq - это просто заглушка, вставленная для компоновщика (с четырьмя байтами нулей, доступными для компоновщика, чтобы вставить правильный адрес).

Есть ли способ, без фактического связывания, получить список сборок, в котором разрешены имена функций?Меня не волнует адрес, который в конечном итоге будет использоваться, только имя функции.Эта информация должна быть в файле .o, так как компоновщик должен использовать ее, чтобы выполнить свою работу.

Я спрашиваю, потому что общая библиотека, в которую входит рассматриваемый код, составляет около 140 МБ, и она занимает long время, чтобы запустить objdump -d для этого, чтобы получить дамп asm со всеми вызовами функций, разрешенными в их настоящие имена.

1 Ответ

13 голосов
/ 25 января 2012

Есть ли способ, без фактического связывания, получить список сборок, в котором разрешены имена функций?

Да: использовать objdump -dr foo.o

...