我想解除/调试一个精灵文件。是否可以以某种方式跟踪调用elf文件中特定字符串的函数?所以我的意思是,我有一个字符串,我知道它用于在文件中搜索该字符串。是否有可能使用例如 gdb 来准确调试可执行文件中的那个位置?或者是字符串在elf文件中的位置,在objdump -d输出中以某种方式可见?
问问题
535 次
1 回答
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
.
于 2018-06-10T06:06:01.463 回答