2011-01-22 125 views
2

我知道Ø一些拆机库,但我正在寻找的是一个有一个API,如:x86或x64反汇编LIB

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

void* addr = findAddrOfFirstInstructionStartingFrom(startAddress , JMP); 

和其他API smiler这一个像搜索特定的不是反汇编从一个地址开始的所有指令,并获取各种信息,因为如果你只想找到一些特定的东西而不是所有东西,它都会变慢。

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

回答

2

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

通常原生代码指令的长度根据它们所采用的操作数而有很大的变化,因此您必须在搜索之前反汇编这些东西。否则,您只需找到与您要搜索的指令模式相匹配的第一个字节序列。这很可能不是真正的指令,而是以前指令的操作数的一部分。

编辑:既然你更新了标题,我可以想到选择BorgPEDasm是开源的。如果你放弃这个开源的东西,那肯定是IDA专业版。

+0

当我说void * findAddrOfFirstInstructionStartingFrom(void * startAddress,InstructionType instruction); void * addr = findAddrOfFirstInstructionStartingFrom(startAddress,JMP); 我不是说要搜索与指令匹配的第一个字节序列,我的意思是反汇编从该地址开始的所有指令,但不会为每条指令生成复杂的信息结构,只要继续查找每条指令,直到您到达搜索范围一个,并且maby生成该指令的jmp addr之类的信息。 – 2011-01-22 16:58:43

+0

拆解确实也涉及其他困难。考虑我添加的两个链接。 – 2011-01-22 18:31:07

1

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

objdump -d --start-address address file | grep -m 1 instruction | cut -d : -f 1 

因此,举例来说,找到的第JMP条指令开始在地址0x08048664文件a.out,你可以这样做:

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

beaEngine http://www.beaengine.org/index.php?option=com_content&view=article&id=10&Itemid=11但它仅支持从愚蠢信息支持的起始地址拆分所有说明。 – 2011-01-22 16:56:03

1

你可能想要的是不只是一个图书馆,但有些反汇编框架。看看IDA-Pro,它还提供了一个多功能的脚本界面(和反汇编API)