Disassamble ELF file - область отладки, в которую загружается конкретная строка двоичного файла

Я хотел бы разобрать / отладить файл эльфа. Можно ли как-то отследить функцию, в которой вызывается конкретная строка в файле elf? Итак, я имею в виду, у меня есть строка, где я знаю, что она используется для поиска этой строки в файле. Можно ли как-то с помощью, например, GDB отладить именно эту позицию в исполняемом файле? Или позиция строки в файле elf, как-то видна в выводе objdump -d?

1 ответ

Для этого вам нужен дизассемблер - objdump просто сбрасывает информацию - она ​​может не дать вам достаточно информации, так как необходим некоторый анализ, прежде чем вы сможете определить, где она используется. Что вам нужно, чтобы получить XREFs для строки, которую вы имеете в виду.

Если вы откроете свой двоичный файл в дизассемблере, он, вероятно, будет иметь возможность показать вам строки, присутствующие в двоичном файле, с возможностью перехода к месту, где используется строка (это может быть несколько мест).

Я продемонстрирую это, используя radare2.

Откройте двоичный файл (я буду использовать ls Вот)

r2 -A / bin / ls

а потом

из-

отобразить все строки. Их много, так что вот выписка

000 0x00004af1 0x100004af1   7   8 (4.__TEXT.__cstring) ascii COLUMNS
001 0x00004af9 0x100004af9  39  40 (4.__TEXT.__cstring) ascii 1@ABCFGHLOPRSTUWabcdefghiklmnopqrstuvwx
002 0x00004b21 0x100004b21   6   7 (4.__TEXT.__cstring) ascii bin/ls
003 0x00004b28 0x100004b28   8   9 (4.__TEXT.__cstring) ascii Unix2003
004 0x00004b31 0x100004b31   8   9 (4.__TEXT.__cstring) ascii CLICOLOR
005 0x00004b3a 0x100004b3a  14  15 (4.__TEXT.__cstring) ascii CLICOLOR_FORCE
006 0x00004b49 0x100004b49   4   5 (4.__TEXT.__cstring) ascii TERM
007 0x00004b60 0x100004b60   8   9 (4.__TEXT.__cstring) ascii LSCOLORS
008 0x00004b69 0x100004b69   8   9 (4.__TEXT.__cstring) ascii fts_open
009 0x00004b72 0x100004b72  28  29 (4.__TEXT.__cstring) ascii %s: directory causes a cycle

давайте посмотрим, где этот последний используется. Если мы перейдем к месту, где он определен 0x100004b72, Мы можем видеть это:

;-- str.s:_directory_causes_a_cycle:       
; DATA XREF from 0x100001cbe (sub.fts_open_INODE64_b44 + 378)

И здесь мы видим, где на него ссылаются -> DATA XREF. Мы можем переехать туда (s 0x100001cbe) и там мы видим, как это используется.

⁝   0x100001cbe      488d3dad2e00.  lea rdi, str.s:_directory_causes_a_cycle    ; 0x100004b72 ; "%s: directory causes a cycle"
⁝   0x100001cc5      4c89ee         mov rsi, r13
⁝   0x100001cc8      e817290000     call sym.imp.warnx         ;[1]

Имея местоположение, вы можете поставить точку останова (r2 также является отладчиком) или использовать ее в gdb,

Другие вопросы по тегам