C++ x86或x64反汇编程序库

C++ x86或x64反汇编程序库,c++,c,assembly,disassembly,C++,C,Assembly,Disassembly,我知道一些反汇编lib,但我要寻找的是一个具有如下api的lib: void * findAddrOfFirstInstructionStartingFrom( void * startAddress , InstructionType instruction); void* addr = findAddrOfFirstInstructionStartingFrom(startAddress , JMP); 而其他API则更像是搜索特定的东西,而不是从一个地址分解所有的指令,并获取各种信息,

我知道一些反汇编lib,但我要寻找的是一个具有如下api的lib:

void * findAddrOfFirstInstructionStartingFrom( void * startAddress , InstructionType instruction);

void* addr = findAddrOfFirstInstructionStartingFrom(startAddress , JMP);
而其他API则更像是搜索特定的东西,而不是从一个地址分解所有的指令,并获取各种信息,因为如果你只想找到特定的东西而不是所有的东西,速度会很慢


如果你知道任何,请让我知道,如果没有,请告诉我一个是开源的,易于修改

您既没有标记也没有告知处理器架构,因此不太可能得到真正的答案

通常,本机代码指令的长度随操作数的不同而变化,因此在搜索之前必须先反汇编。否则,只需找到与搜索的指令模式匹配的第一个字节序列。它很可能不是一条实指令,而是前一条指令操作数的一部分


编辑:既然你更新了标题,我就可以选择开源了。如果您放弃开源,那么IDA pro肯定是绝对的。

我不知道有任何API可以做到这一点,但可以使用一些命令行脚本来完成:

objdump -d --start-address address file | grep -m 1 instruction | cut -d : -f 1
因此,例如,要在文件
a.out
中查找从地址0x08048664开始的第一条
JMP
指令,可以执行以下操作:

$ objdump -d --start-address 0x08048664 a.out | grep -m 1 jmp | cut -d : -f 1
 8048675

您可能需要的不仅仅是一个库,而是一些反汇编程序框架。看看IDA Pro,它还提供了一个多功能的脚本接口(和反汇编程序API)

虽然有beaEngine,但它只支持从一个起始地址反汇编所有指令,并提供傻瓜信息支持。当我说void*findDroffirstInstructionStartingFrom(void*startAddress,InstructionType instruction)时;void*addr=findAddRoffirStinInstructionStartingFrom(startAddress,JMP);我不是说搜索与指令匹配的第一个字节序列,我是说反汇编从该地址开始的所有指令,但不要为每条指令生成复杂的信息结构,只是继续查找每条指令,直到找到搜索到的指令为止,而且maby可以为该指令生成类似jmp addr的信息。反汇编也涉及其他困难。考虑一下我添加的两个链接。我正在寻找免费或开源的东西,我找不到关于IDA disassembler的任何东西。API@neo_x3m:我知道没有与IDA相对应的OSS–是的,有一些这样的OSS会很好。无论如何,这里是关于编写脚本和扩展IDA的:现在最好的办法可能是@Job告诉我们的。顺便说一句:任何这样的API都不会使用C指针来处理反汇编二进制文件中的部分。它将使用off_t和其他非指针类型,因为很明显,C指针是非常抽象的对象,如果转换为整数,只要指针算法保持不变,它们的值可能是任何东西。