Разрешение адресов инструкций в символы в *86 Linux ELFLinux

Ответить
Anonymous
 Разрешение адресов инструкций в символы в *86 Linux ELF

Сообщение Anonymous »

У меня есть адреса инструкций из контекста -->[RIP], и мне нужны соответствующие им символы. Я пробовал использовать dlsym, но он не работает со статическими символами. Итак, я попробовал сделать это вручную. Мне приходится делать это в коде, и я не могу использовать какие-либо утилиты CLI. Вот что я пробовал до сих пор:
Сначала мы получаем абсолютный адрес инструкции для просмотра из общего буфера. пусть этот адрес будет = 563174d510d5. Затем мы находим начальный адрес этого pid из /proc/($pid of engineed)/maps. Карты содержат диапазоны адресов, в которых отображается наш движок. Пусть этот диапазон будет 563174000000-5631763e0000. Как мы видим, наш абсолютный адрес находится в этом диапазоне. Итак, мы вычитаем начальный адрес из нашего адреса, чтобы получить смещение. Offset= 563174d510d5- 563174000000 = D510D5.
3:13
В настоящее время мы ищем это смещение D510D5 в таблице символов. (поиск означает поиск ближайшего начального адреса функции, частью которой она может быть).
Есть ли какие-либо дополнительные вычисления, которые мне не хватает??. Я спрашиваю, потому что разрешение символов в моем алгоритме и разрешение в addr2line немного отличаются. Я чувствую, что мне нужно извлечь что-то еще из смещения D510D5.
Тип файла Elf — DYN (файл общего объекта)
Точка входа 0xd4aa20
Существует 10 заголовков программы , начиная со смещения 64.
Заголовки программ:
Type Off VirtAddr PhysAddr
FileSiz MemSiz Flags Align
PHDR 0x00000000000000040 0x0000000000000040 0x0000000000000040
0x0000 000000000230 0x0000000000000230 Р Е 8
INTERP 0x0000000000000270 0x0000000000000270 0x0000000000000270
0x000000000000001c 0x000000000000001c R 1
[Запрос интерпретатора программы: /lib 64/ld-linux-x86-64.so.2]
ЗАГРУЗИТЬ 0x0000000000000000 0x0000000000000000 0x00000000000000000x00000000023df318 0x00000000023df318 R E 200000
ЗАГРУЗКА 0x00000000023df400 0x00000000025df400 0x00000000025df400
0x00000 00004afd048 0x000000000c6ec200 RW 200000
ДИНАМИЧЕСКИЙ 0x0000000002415080 0x0000000002615080 0x0000000002615080
0x0000000000000270 0x0000000000000270 RW 8
ПРИМЕЧАНИЕ 0x000000000000028c 0x000000000000028c 0x000000000000028c
0x0000000000000044 0x0000000000000044 R 4
TLS 0x00000000023df400 0x00000000025df400 0x00000000025df400
0x00000000000000 38 0x000000000006ea20 R 400
GNU_EH_FRAME 0x000000000218e464 0x000000000218e464 0x000000000218e464
0x000000000004959c 0x000000 000004959c R 4
GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 RW 10
GNU_RELRO 0x00000000023df400 0x00000000025df400 0x00000000025df400
0x0000000000036c00 0x00000000 00036c00 Р 1

Подробнее здесь: https://stackoverflow.com/questions/783 ... -linux-elf
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»