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
寄存器仅输出。