2013-10-14 75 views
0

我想使用idautils和or idaapi更改指令的Op值。 例如,我在內存中下載了一個二進制文件,並且我想更改JMP語句的JMP地址(我知道跳轉的位置,我可以獲得該語句)。 我試圖做這樣的事情:使用ida API修改指令

i = ida.idautils.DecodeInstruction(addr) 
op = i.Op1 
op.addr = new_addr 
i.Op1.assign(op) 
print i.Op1.addr 

但該地址沒有改變。 相反,如果我這樣做:

i = ida.idautils.DecodeInstruction(addr) 
op = idaapi.op_t() 
op.addr = new_addr 
i.Op1.assign(op) 
print i.Op1.addr 

它的工作原理,但是當我看字節(使用[idaapi.get_bytes(地址+ i)對於我在範圍(0,i.size)]),它們是沒有改變。 我想改變這個地址,並且當我讀取字節的時候也看到了這個改變。

回答

0

嘗試使用PatchByte(或idaapi.patch_byte)。然後你應該看到idaapi.get_byte正確的值。對於單詞,雙字和甚至可變長度的緩衝區都有等效的補丁函數。

(請注意,這需要您知道要更改的指令的確切字節編碼)