gpt4 book ai didi

c - 加载 PE header

转载 作者:太空狗 更新时间:2023-10-29 14:51:01 24 4
gpt4 key购买 nike

基本上,我要做的是找到 PE 文件的最后一部分。我仔细阅读了 PE 规范,但我无法发现我的代码在哪里失败。

PIMAGE_DOS_HEADER pidh = (PIMAGE_DOS_HEADER)buffer;
PIMAGE_NT_HEADERS pinh = (PIMAGE_NT_HEADERS)(pidh + pidh->e_lfanew);
PIMAGE_FILE_HEADER pifh = (PIMAGE_FILE_HEADER)&pinh->FileHeader;
PIMAGE_OPTIONAL_HEADER pioh = (PIMAGE_OPTIONAL_HEADER)&pinh->OptionalHeader;
PIMAGE_SECTION_HEADER pish = (PIMAGE_SECTION_HEADER)(pinh + sizeof(IMAGE_NT_HEADERS) + (pifh->NumberOfSections - 1) * sizeof(IMAGE_SECTION_HEADER));

buffer 是包含已加载可执行文件的字节数组,pish 是指向最后一部分的指针。出于某种原因,部分的数量似乎超过 20 000。

有什么想法吗?提前致谢

最佳答案

我看到一个问题:e_lfanew 是IMAGE_NT_HEADERS 结构的偏移量,以字节 为单位。您将此字节数添加到 IMAGE_DOS_HEADER 指针,因此您将向前移动 sizeof(IMAGE_DOS_HEADER)*pidh->e_lfanew 字节。

固定版本:

PIMAGE_DOS_HEADER pidh = (PIMAGE_DOS_HEADER)buffer;
PIMAGE_NT_HEADERS pinh = (PIMAGE_NT_HEADERS)((BYTE*)pidh + pidh->e_lfanew);
PIMAGE_FILE_HEADER pifh = (PIMAGE_FILE_HEADER)&pinh->FileHeader;
PIMAGE_OPTIONAL_HEADER pioh = (PIMAGE_OPTIONAL_HEADER)&pinh->OptionalHeader;
PIMAGE_SECTION_HEADER pish = (PIMAGE_SECTION_HEADER)((BYTE*)pinh + sizeof(IMAGE_NT_HEADERS) + (pifh->NumberOfSections - 1) * sizeof(IMAGE_SECTION_HEADER));

调试此类问题的最佳方法是使用调试器进入代码并亲自在内存中查看 PE 数据。例如,您可以打开 Visual Studio 十六进制编辑器并查看所有字节数据,以及您实际读取的值。

以下是有关在 VS 2010 中查看程序内存的一些信息: http://msdn.microsoft.com/en-us/library/s3aw423e.aspx

关于c - 加载 PE header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8782771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com