从字节缓冲区到结构体的转换有什么作用?

问题描述

我正在尝试理解以下代码。

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 (将#修改为@)