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

How to seach for specific instructions in an ELF binary

如何在 ELF 可执行文件中搜索特定的 ASM 指令? 例如。我想检查我的可执行文件中的序列 mov [=10=],%eax 是否存在。有什么工具吗?是否有任何工具可以让我搜索仅因所使用的寄存器而异的类似指令? 例如:它应该同时匹配 mov [=10=],%eaxmove [=12=],%ecx.

对于这个需求,我使用了两种方法。 最简单的是 objdump。使用 objdump -S myexe > myexe.s 将二进制文件转换为 asm 格式,并使用 grep 进行最基本的搜索。

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

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

我浏览了 llvm-objdump 的代码并进行了修改以跟踪特定操作码何时出现、特定操作数何时出现等。相信我,现有代码非常容易理解和制作修改。这个修改后的 objdump 快了很多并且完成了工作。我对 DisassembleObject 进行了修改,其中有一个

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

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