2016-08-03 25 views
0

我遇到了一些軟件問題,我正在嘗試爲朋友進行調試。如何在組件中取消引用PTR?

長話短說我需要知道如何從指針中獲取函數的地址.. 。

因此,舉例來說,如果我有...

MOV ECX, DWORD PTR DS : [82738119] 

然後,我需要能夠扭轉這種實際上不知道地址的位置,這樣的事情...

// I'm looking for a way to make EAX 82738119, using only the pointer in ECX.... 
MOV EAX, SOME_COMMAND[ECX]; 

回答

2

由於內存位置「嵌入」指令的操作碼,因此如果不讀取指令本身,則無法執行此操作。

例如:

CPU Disasm 
Address Hex dump    Command 
00DA2A6D A1 A861DA00   MOV EAX,DWORD PTR DS:[0DA61A8] 

瞭解如何在指令的存儲器位置(0x0DA61A8)也可在操作碼中可以看出(小端:A8 61 DA 00)。

上例中沒有辦法從EAX獲取內存位置。

一種可能的「特技」是讀取在指令的存儲器位置:

CPU Disasm 
Address Hex dump   Command        Comments 
00DA35B8  A1 A861DA00 MOV EAX,DWORD PTR DS:[0DA61A8]  ; example instruction (we want to read 0x0DA61A8) 
00DA35BD  E8 00000000 CALL 00DA35C2      ; call next instruction 
00DA35C2  59    POP ECX        ; pop this instruction address in ecx 
00DA35C3  83E9 09  SUB ECX,9       ; ecx points on 0x0DA35B9 (memory location) 
00DA35C6  8B01   MOV EAX,DWORD PTR DS:[ECX]   ; eax = [00DA35B9] = 0x0DA61A8 
+0

另一種方式陳述的第一部分:在'MOV ECX,[82738119]','的寄存器ecx'輸出-只要。 –