我正在尝试为一位朋友调试的软件遇到一些问题..
长话短说明我需要知道如何从指针中获取函数的地址......
例如,如果我有......
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];
答案 0 :(得分: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