2011-01-22 132 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)