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
,