Disassamble ELF文件 - 加载特定二进制字符串的调试区域

时间:2018-06-08 18:43:17

标签: debugging disassembly objdump dbg

我想取消/调试一个精灵文件。是否有可能跟踪调用elf文件中特定字符串的函数? 所以我的意思是,我有一个字符串,我知道它用于在文件中搜索该字符串。以某种方式可能与例如gdb在可执行文件中准确调试该位置? 或者是elf文件中字符串的位置,在objdump -d输出中以某种方式可见?

1 个答案:

答案 0 :(得分:0)

为了做到这一点,你需要一个反汇编程序 - objdump只是转储信息 - 它可能不会给你足够的信息,因为在你知道它的使用位置之前需要进行一些分析。你需要的是获得你想到的字符串的XREFs

如果你在反汇编程序中打开二进制文件,它可能会显示二进制文件中存在的字符串,并能够跳转到正在使用该字符串的位置(可能是多个位置)。 / p>

我将使用radare2来展示这一点。

打开二进制文件(我将在这里使用ls

  

r2 -A / bin / ls

然后

  

IZ

显示所有字符串。这里有很多这样的摘录

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)

在这里,我们看到它被引用的位置 - >数据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中使用它。