[英]c++ Pointer operation equivalent with ReadProcessMemory
我需要从不同的应用程序中读取程序的内存。 我有整个过程和应用程序'连接'到位。
我有一个函数在打开的进程的内存中搜索一个模式,并且由于签名返回一个我感兴趣的函数的有效入口点。
问题是,导致我访问数据的汇编指令(我无法通过偏移或签名找到),如下所示:
H5Calc.exe+12DDC5B - E8 10F1FFFF - call H5Calc.exe+12DCD70
我四处搜寻,发现这可能符合我的目的:
return (MainClass*) *(DWORD*) PatternPointer;
但问题是,如果使用'injection',上面的行将起作用,而我正在使用ReadProcessMemory,因为我不允许这样做。
所以,有人可以帮助'翻译'
(MainClass*) *(DWORD*) PatternPointer;
指针操作进入ReadProcessMemory调用,考虑汇编指令? 鉴于我正在从另一个应用程序打开,如果没有使用ReadProcessMemory(我可以定期调用其他操作),我无法访问H5Calc内存区域。
任何帮助赞赏。
谢谢。
您可以按照此处所述计算实际地址,即获取跳转后指令的地址,即
0x12DDC5B + 5 = 0x12DDC60
然后你取偏移量,这是一个32位小端2的补码有符号整数,所以
"0x10 0xF1 0xFF 0xFF" = 0xFFFFF110 - 0x100000000 = -0xEF0
然后将偏移量添加到上面计算的基址以获取
0x12DDC60 + (-0xEF0) = 0x12DCD70
在C中,这看起来像:
unsigned char *jmp_ptr = (unsigned char *)0x12DDC5B;
int offset; // or use ptrdiff_t if it's 32 bits wide
ReadProcessMemory(hProc, jmp_ptr + 1, &offset, sizeof offset, NULL);
unsigned char *target_ptr = jmp_ptr + 5 + offset;
(应用样式mash-ups来获取C ++代码。还要检查函数的返回值等)
您现在可以将结果地址提供给另一个ReadProcessMemory()
调用,以获取指向实例的指针:
MainClass *instance = NULL;
ReadProcessMemory(hProc, target_ptr, &instance, sizeof instance, NULL);
您可以在进程之间使用共享内存。 如果你想知道如何做到这一点,我可以发布一些代码。 Windows API使用CreateFileMapping()和MapViewOfFile()。 然后两个进程都可以看到相同的内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.