現在我已經從EIP寄存器獲得了機器指令地址。這個機器指令可以改變某個區域的內存的值,我想要但不能得到這個內存的地址。如何獲取一條機器指令寫入的地址?
當然,我可以從機器指令的地址讀取數據,但內容是機器指令,如:0x8b0c4d8b ......,它是不可讀的(我不能使用gdb等調試工具)。
如何獲取一條機器指令將寫入的地址?
現在我已經從EIP寄存器獲得了機器指令地址。這個機器指令可以改變某個區域的內存的值,我想要但不能得到這個內存的地址。如何獲取一條機器指令寫入的地址?
當然,我可以從機器指令的地址讀取數據,但內容是機器指令,如:0x8b0c4d8b ......,它是不可讀的(我不能使用gdb等調試工具)。
如何獲取一條機器指令將寫入的地址?
如果你知道機器代碼EIP點,只是想和你拆開它,做這樣的事情(我把你的0x8b0c4d8b
爲例):
#create binary file $ echo -en "\x8b\x0c\x4d\x8b" > foo.bin #disassemble it $ objdump -D -b binary -m i386 foo.bin foo.bin: file format binary Disassembly of section .data: 00000000 : 0: 8b .byte 0x8b 1: 0c 4d or $0x4d,%al 3: 8b .byte 0x8b
因此,在這種情況下,這不是」不改變任何內存位置,但如果它確實如此,你可以很容易地從彙編代碼中看到它。
編輯:從評論看來,你想以編程方式做到這一點。看看udis86。它允許examining operands的說明。對於ARM,請參閱disarm。
使用調試器 - 在該指令的地址中設置斷點,然後在斷點處檢查EIP - 這是唯一可靠的方法。 – 2012-04-27 08:00:04
但EIP是指令的地址,我說得對嗎?我仍然無法獲得該指令將寫入的地址。 – zsounder 2012-04-27 08:12:39
我覺得@PaulR misspoke;儘管如此,仍然有必要使用反彙編程序(或者內置一個工具)或編寫自己的工具來知道如何反彙編x86操作碼。 – geekosaur 2012-04-27 08:16:15