Нахождение смещения объектного файла с помощью objdump - PullRequest
0 голосов
/ 10 мая 2011

Я немного запутался, пытаясь найти код объектного файла, которому соответствует конкретное смещение.Смещение составляет 0xB71B13E8

Используя proc/<PID>/maps, я обнаружил, что текстовый код библиотеки libX11 для целевого процесса отображен в области 0xB70CC000-0xB71B7000.

Теперь я хочучтобы найти это смещение в объектном файле библиотеки X11 lib /usr/lib/libX11.so.6.2.0, используя objdump.

Должен ли я изучить 0xB71B7000 - 0xB71B13E8 = 0x5C18 или 0xB71B13E8 - 0xB70CC000 = 0xE53E8?

Другой вопрос, который у меня есть, этоследующее: 0xB70CC000-0xB71B7000 область, в которой находится текстовый код libX11 lib, имеет 0xEB000 байтов.Тем не менее, когда я objdump /usr/lib/libX11.so.6.2.0 я вижу смещения, начиная с 0xA3517 to 0x135C0 (то есть только 0x8FF57).Есть ли причина для этого?

Заранее спасибо.

1 Ответ

0 голосов
/ 11 мая 2011

Первый адрес раздела rx в / proc / X / maps (вы также можете использовать 'pmap X') - это первый виртуальный адрес библиотеки, в то время как смещения, отображаемые objdump --disassemble, являются виртуальными адресами.при условии начала 0. Адрес, который вас интересует, это 0xE53E8 (при условии, что вы дали цифры, полученные при просмотре rx-отображения), поэтому ищите этот адрес в выходных данных objdump --disassemble, чтобы найти правильное местоположение кода.

Обратите внимание, что вы можете использовать GDB для непосредственного просмотра памяти работающей программы.Запустите gdb, затем запустите 'attach X', где X - PID запущенной программы, затем 'дизассемблируйте 0xB71B13E8'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...