如何在装配中取消引用PTR?

时间:2016-08-03 12:03:06

标签: assembly ollydbg

我正在尝试为一位朋友调试的软件遇到一些问题..

长话短说明我需要知道如何从指针中获取函数的地址......

例如,如果我有......

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];

1 个答案:

答案 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