如何在ELF可执行文件中搜索特定的ASM指令?
例如。我想检查我的可执行文件中的序列mov $0,%eax
。这有什么工具吗?是否有任何工具可以让我搜索类似的指令,这些指令仅因使用的寄存器而异?
例如:它应该与mov $0,%eax
以及move $0,%ecx
匹配。
答案 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
是当前指令的名称,您可以检查并引入自己的代码。