如何在ELF二进制文件中搜索特定指令

时间:2015-04-10 01:28:06

标签: linux assembly elf

如何在ELF可执行文件中搜索特定的ASM指令? 例如。我想检查我的可执行文件中的序列mov $0,%eax。这有什么工具吗?是否有任何工具可以让我搜索类似的指令,这些指令仅因使用的寄存器而异? 例如:它应该与mov $0,%eax以及move $0,%ecx匹配。

1 个答案:

答案 0 :(得分:1)

我已经采用了两种方法来满足要求。 最简单的是objdump。使用objdump -S myexe > myexe.s将二进制转换为asm格式,并使用grep作为最基本的搜索类型。

当我的搜索要求提高时,例如。在jmp之前用jmp指令查找pop条指令,我继续使用ruby regexes而不是grep来跟踪jmp和pops的回溯。

但有时我不得不扫描非常大的二进制文件(100 MB)并且objdump ruby​​方法很慢并被内核杀死(我的脚本非常基本。糟糕的脚本可能是原因的一部分。但它是还是很慢)

我浏览了llvm-objdump的代码并修改了一下,以便跟踪特定操作码何时发生,特定操作数何时发生等等。相信我,现有代码很容易理解并对其进行修改。这个改进的objdump速度更快,完成了工作。我对DisassembleObject进行了修改,其中有

for (Index = Start; Index < End; Index += Size)

主循环遍历可执行文件中的每条指令。 Inst是当前指令的名称,您可以检查并引入自己的代码。