2015-08-10 4 views
1

У меня есть исполняемый файл и лишенlib.so файл, используемый исполняемым файлом. Я декомпилировал файл lib.so и определил функцию fun Я хочу установить точку останова и ее внутренний адрес.Как установить точку останова с функцией gdb для функции из разделенной общей библиотеки?

Можно ли установить точку останова на функцию fun с помощью gdb? Как определить адрес fun во время выполнения?

ответ

1

Можно ли установить точку останова на функцию fun с помощью gdb?

Да: GDB может установить точку останова на произвольный адрес:

(gdb) break *0x12345678 

Как определить адрес удовольствия во время выполнения?

Поскольку GDB по умолчанию отключает ASLR, адрес fun не будет меняться от запуска к запуску (если вы запускаете программу под управлением GDB с самого начала).

Для этого вам остается только найти адрес fun.

Предположим, что ваш lib.so связан по номеру 0 (большинство разделяемых библиотек, не связанных с предварительным соединением).

Далее предположим, что вы находитесь в Linux.

Затем info proc map сообщит вам, где загружен lib.so (вы хотите, чтобы его первый начальный адрес принадлежал ему). Добавьте этот начальный адрес к значению fun, который вы обнаружили путем разборки, и установите там точку останова.

+0

Большое спасибо моему другу! Ты спас мой день :) –