Нахождение функции в разборке - PullRequest
4 голосов
/ 01 марта 2009

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

Ответы [ 2 ]

3 голосов
/ 03 марта 2009

RVA - это перемещаемый виртуальный адрес. Чтобы найти реальный адрес в пространстве процесса, вам нужно знать базовый адрес, куда модуль был загружен в процессе. Добавьте этот базовый адрес в RVA, и вы получите реальный адрес. Я не использовал ollydbg, но был бы поражен, если бы он не предоставлял базовый адрес для модулей, загруженных в процессе, к которому он был подключен. Если по какой-либо причине он не предоставляет эту информацию, вы можете получить ее с помощью procxp.exe из sysinternal tools.

3 голосов
/ 01 марта 2009

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

Если вы знаете компилятор, который использовался для генерации кода, о котором идет речь, вы сможете найти, что искать.

Пример

$ cat main.c
int main(int argc, char **argv) {
        return 1;
}
$ gcc -m32 -S main.c
$ cat main.s 
        .file     "main.c"
        .text
.globl main
        .type    main, @function
main:
        leal     4(%esp), %ecx
        andl     $-16, %esp
        pushl    -4(%ecx)
        pushl    %ebp
        movl     %esp, %ebp
        pushl    %ecx
        movl     $1, %eax
        popl     %ecx
        popl     %ebp
        leal     -4(%ecx), %esp
        ret
        .size    main, .-main
        .ident   "GCC: (Debian 4.3.3-4) 4.3.3"
        .section    .note.GNU-stack,"",@progbits

В моем примере инструкция movl% esp,% ebp является последней инструкцией этого кода установки.

Коммерческий дизассемблер IDA Pro, для которого доступна для скачивания бесплатная версия как пиво , выполняет довольно неплохую работу по автоматическому поиску функций.

...