如何在 ELF 二进制文件中搜索特定指令
How to seach for specific instructions in an ELF binary
如何在 ELF 可执行文件中搜索特定的 ASM 指令?
例如。我想检查我的可执行文件中的序列 mov [=10=],%eax
是否存在。有什么工具吗?是否有任何工具可以让我搜索仅因所使用的寄存器而异的类似指令?
例如:它应该同时匹配 mov [=10=],%eax
和 move [=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
是当前指令的名称,您可以对其进行检查并引入您自己的代码。
如何在 ELF 可执行文件中搜索特定的 ASM 指令?
例如。我想检查我的可执行文件中的序列 mov [=10=],%eax
是否存在。有什么工具吗?是否有任何工具可以让我搜索仅因所使用的寄存器而异的类似指令?
例如:它应该同时匹配 mov [=10=],%eax
和 move [=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
是当前指令的名称,您可以对其进行检查并引入您自己的代码。