问题描述
我正在尝试理解以下代码。
PLOADED_IMAGE ReadRemoteImage(HANDLE hProcess,LPCVOID lpImageBaseAddress) {
BYTE* lpBuffer = new BYTE[BUFFER_SIZE];
BOOL bSuccess = ReadProcessMemory
(
hProcess,lpImageBaseAddress,lpBuffer,BUFFER_SIZE,0
);
if (!bSuccess)
return 0;
PIMAGE_DOS_HEADER pDOSHeader = (PIMAGE_DOS_HEADER)lpBuffer;
PLOADED_IMAGE pImage = new LOADED_IMAGE();
pImage->FileHeader =
(PIMAGE_NT_HEADERS32)(lpBuffer + pDOSHeader->e_lfanew);
pImage->NumberOfSections =
pImage->FileHeader->FileHeader.NumberOfSections;
pImage->Sections =
(PIMAGE_SECTION_HEADER)(lpBuffer + pDOSHeader->e_lfanew +
sizeof(IMAGE_NT_HEADERS32));
return pImage;
}
该代码由 Windows API 调用 ReadProcessMemory 组成,该调用请求指向缓冲区的指针,API 调用将在该缓冲区中更新其返回值。我不明白的是之后是什么。什么操作
PIMAGE_DOS_HEADER pDOSHeader = (PIMAGE_DOS_HEADER)lpBuffer;
做吗?据我所知,它是一个演员表,但是我无法找到任何名为 PIMAGE_DOS_HEADER 的结构。我开始认为它不是演员表,这让我难以理解这是什么操作。下一行进一步伴随:
pImage->FileHeader =
(PIMAGE_NT_HEADERS32)(lpBuffer + pDOSHeader->e_lfanew);
从我收集到的lpBuffer是一个Byte Array,那么这里的()有什么作用呢?如何将字节数组添加到其他内容中?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)