Как найти смещение функции с помощью GDB? - PullRequest
0 голосов
/ 04 мая 2020

У меня есть общий объектный файл с информацией DWARF. Я хочу найти смещение функции. Моя трассировка стека находится в формате mangledFuncName + 0x123. Я хочу найти строку кода для соответствующего кадра. В идеале я хотел бы построить какое-то отображение между всеми смещениями файла .so и именем файла / белья для смещения / диапазона смещений. Это возможно сделать с GDB?

1 Ответ

0 голосов
/ 04 мая 2020

Я хочу найти смещение функции.

readelf -Ws foo.so | egrep ' function\W'

Например:

readelf -Ws /lib/x86_64-linux-gnu/libc.so.6 | egrep ' open\W'
  1782: 00000000000eb430   294 FUNC    WEAK   DEFAULT   14 open@@GLIBC_2.2.5

Значение open равно 0xeb430

Моя трассировка стека имеет формат mangledFuncName + 0x123. Я хочу найти строку кода для соответствующего кадра

Самое простое решение - вычислить фактический адрес (добавьте 0x123 к адресу mangledFuncName, извлеченному выше) и используйте addr2line -fe foo.so $addr

Например, отображение open+0x123 в исходный файл / строку дает:

addr2line -fe /lib/x86_64-linux-gnu/libc.so.6 0xeb483
__libc_open64
/build/glibc-oCLvUT/glibc-2.29/io/../sysdeps/unix/sysv/linux/open64.c:48 (discriminator 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...