Assembly 如何在程序集中取消引用PTR?

Assembly 如何在程序集中取消引用PTR?,assembly,ollydbg,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]; 如果不读取指令本身,则无法执行此操作,因为内存位置

我在为朋友调试一个软件时遇到了一些问题

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

例如,如果我有

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

如果不读取指令本身,则无法执行此操作,因为内存位置“嵌入”在指令的操作码中

例如:

CPU Disasm
Address   Hex dump             Command
00DA2A6D  A1 A861DA00          MOV EAX,DWORD PTR DS:[0DA61A8]
查看指令中的内存位置(
0x0DA61A8
)在操作码中的显示方式(little endian:
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

如果不读取指令本身,则无法执行此操作,因为内存位置“嵌入”在指令的操作码中

例如:

CPU Disasm
Address   Hex dump             Command
00DA2A6D  A1 A861DA00          MOV EAX,DWORD PTR DS:[0DA61A8]
查看指令中的内存位置(
0x0DA61A8
)在操作码中的显示方式(little endian:
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

说明第一部分的另一种方法:在
MOV-ECX,[82738119]
中,
ECX
寄存器仅输出。说明第一部分的另一种方法:在
MOV-ECX,[82738119]
中,
ECX
寄存器仅输出。