Как определить имя функции в эльфе - PullRequest
0 голосов
/ 20 апреля 2019

Я хотел написать синтаксический анализатор эльфов и разобрать секцию .text, поэтому я проанализировал файл эльфов и передал секцию .text программе-камню, чтобы разобрать ее для меня. К сожалению, Capstone не разрешает имена функций.

Согласно приведенному ниже коду ассемблера в моем эльфийском файле, есть вызов функции, для которой я хочу разрешить ее имя.

call 8048380

Я проверил раздел .symtab, но функции, которые требуют перемещения, такие как printf, имеют нулевой адрес в таблице, потому что их адрес неизвестен до времени загрузки.

Так, как мне разобраться с его именем?

1 Ответ

0 голосов
/ 21 апреля 2019

Я проверил раздел .symtab, но функции, которые необходимо переместить, например printf

Интересующая вас функция (функция по адресу 0x8048380) - , а не например, printf и не требуют перемещения во время выполнения.

Из вашего вопроса неясно как вы получили эту разборку:

call 8048380

Скорее всего, вам нужно использовать более качественный инструмент, или вы указали свой инструмент на обрезанный двоичный файл (не делайте , ).

Вот пример того, как должен выглядеть разумный вывод:

int foo() { return 42; }
int main() { return foo(); }

$ gcc t.c
$ gdb -q ./a.out
(gdb) disas main
Dump of assembler code for function main:
   0x08048410 <+0>: push   %ebp
   0x08048411 <+1>: mov    %esp,%ebp
   0x08048413 <+3>: call   0x8048406 <foo>  // GDB resolves the address
   0x08048418 <+8>: pop    %ebp
   0x08048419 <+9>: ret    
End of assembler dump.
...