我试图读取当前进程的内容来找到一个模式,我通过调用GetModuleHandleA()
获得一个指向基址的指针,然后想循环通过它并保持匹配字节,但我不知道我可以循环通过的最大大小是多少?
我试图读取文件的大小,并使用文件大小作为最大循环计数器。
以下是我目前为止写的代码,
const char buf[] = { 0x40, 0x35, 0x02, 0x00, 0x78, 0x00 };
char ProcessFilePath[MAX_PATH];
GetModuleFileNameA(NULL, ProcessFilePath, MAX_PATH);
HANDLE hFile = CreateFileA(ProcessFilePath,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
return -1;
LARGE_INTEGER size;
GetFileSizeEx(hFile, &size);
const unsigned char* lpImage = (unsigned char*)GetModuleHandleA(NULL);
int maincounter = 0;
int patternsize = sizeof(buf);
for (int maincounter = 0; maincounter < size.LowPart; maincounter++)
{
printf("%02x", lpImage[maincounter]);
}
如何读取所有进程内存?确定进程内存大小的正确方法是什么?为了澄清,我试图读取进程内存并匹配函数签名的字节序列。目标是找到函数在内存中的位置。
谢谢
1条答案
按热度按时间b4lqfgs41#
感谢@500 -内部服务器错误评论,我使用了ToolHelp API,我的问题得到了解决。
MODULEENTRY32
有两个成员modBaseSize
用于大小,modBaseAddr
用于地址。