LLDB Python API, как мне найти адрес загрузки модуля? - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь написать плагин Python для lldb, который создаст точку останова на основе заданного имени модуля и смещения от начала этого модуля. В настоящее время я делаю это вручную, с помощью таких команд:

(lldb) image list my_module
[  0] XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX 0x00000000deadbeef /path/to/my_module
(lldb) breakpoint set -a 0x00000000deadbeef + 0x1234

И я хочу автоматизировать это. Для этого мне нужно получить адрес загрузки my_module. Что-то похожее на использование команды lldb image list и чтение результирующего адреса.

Я нашел метод SBModule.ResolveFileAddress(), который выполняет обратное преобразование - он берет абсолютный адрес и преобразует его в относительный модуль one.

Существует ли функция, которая принимает объект SBModule или имя модуля и возвращает загрузку этого модуля?

1 Ответ

1 голос
/ 08 января 2020

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

«список изображений» показывает адрес загрузки секции TEXT двоичного файла. Если вы знаете, что символ, который вы ищете, находится в разделе TEXT, то вы можете получить SBSections из SBModule (у него есть свойство «section», которое является итеративным), найти раздел TEXT и получить его адрес загрузки.

...