gpt4 book ai didi

c++ - 获取 .text 节代码 PE 文件格式的偏移量?虚拟地址,PointerToRawData?

转载 作者:太空宇宙 更新时间:2023-11-04 06:03:55 26 4
gpt4 key购买 nike

我已经尝试这样做了大约两天,但没有成功。我已经阅读了许多 PE 文件格式教程,但无济于事。

我通过完美运行的 CreateFileMapping 将 32 位可执行文件映射到内存中。然后我的程序循环遍历节标题,并根据我的默认特征检查特征(以确保该节是可执行的并且是代码)。如果为真,程序将返回指向该节标题的 (PIMAGE_SECTION_HEADER) 指针(到目前为止程序运行良好)。

现在我有了指针,当我计算这些条目时,有两个特定的结构条目让我感到困惑,那就是 PointerToRawData 和 VirtualAddress;VirtualSize = 4096,PointerToRawData = 1536。

根据我在 PE 文档中读到的内容,PointerToRawData 是假定的偏移量(RVA???)到磁盘部分数据的第一个字节(我正确吗?),并且是对齐的倍数值 (512)。问题是我要将此值设置为什么,以获得可用于访问该部分数据的指针。在内存映射文件上,使用(VirtualAddress 值 + imagebase 值)来查找该部分的第一个字节会更好吗?

另一个混淆点是 VirtualSize 与 SizeOfRawData。这让我感到困惑,因为在这篇文章中 - http://msdn.microsoft.com/en-us/library/ms809762.aspx ,它说“结构中稍后的 SizeOfRawData 字段(似乎有点用词不当)保留了四舍五入的值”,但我的 VirtualSize 大于我的 SizeOfRawData 值,这导致我对应该使用哪个感到困惑。

该程序的目的是找到可执行段(.text段),对该段中的所有位进行按位运算,并在进入下一段之前结束运算。

我不希望它看起来像我期待的勺子喂食,我只是想要一些说明。

感谢您的时间/帮助,非常感谢。

最佳答案

我手头没有规范或任何 PE 代码可供引用(我正在沙发上用我的 iPad 写这篇文章 ;)但要意识到的关键点是有两个 要考虑的模式:所有关于 RVA 的讨论仅在 PE 映射到内存并且那里的对齐是页面对齐时才有意义。当您从磁盘读取文件时,偏移量是文件偏移量并且每个部分都使用文件对齐方式。

希望对您有所帮助。

关于c++ - 获取 .text 节代码 PE 文件格式的偏移量?虚拟地址,PointerToRawData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14036232/

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