首页 文章

获取.text段代码PE文件格式的偏移量? VirtualAddress,PointerToRawData?

提问于
浏览
0

我一直试图这样做大约两天,没有成功 . 我一直在阅读许多PE文件格式教程无济于事 .

我通过CreateFileMapping将32位可执行文件映射到内存中,效果很好 . 我的程序然后循环遍历节 Headers ,并根据我的默认特征检查特征(以确保该节是可执行的并且是代码) . 如果为true,则程序返回指向该节头的(PIMAGE_SECTION_HEADER)指针(程序到目前为止工作正常) .

现在我有了指针,结构中有两个特定的条目让我困惑,那就是PointerToRawData和VirtualAddress,当我输入条目时; VirtualSize = 4096,PointerToRawData = 1536 .

从我在PE文档中读到的是,PointerToRawData是磁盘上部分中数据的第一个字节的假定偏移量(RVA ???)(我是否正确?),并且是对齐值的倍数(512 ) . 问题是如何设置此值,以获取可用于访问节的数据的指针 . 在内存映射文件上,最好使用(VirtualAddress值imagebase值)来查找该节的第一个字节?

另一个混淆点是VirtualSize vs SizeOfRawData . 这让我很困惑,因为在这篇文章中http://msdn.microsoft.com/en-us/library/ms809762.aspx,它说"The SizeOfRawData field (seems a bit of a misnomer) later on in the structure holds the rounded up value"但我的VirtualSize大于我的SizeOfRawData值,这导致我应该使用哪一个混淆 .

该程序的目的是找到可执行部分(.text部分)并对该部分中的所有位执行按位操作,并在下一部分之前结束操作 .

我不希望它看起来像我期待的勺子,我只想要一些澄清 .

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

1 回答

  • 5

    我不会在我的iPad上用沙发写这篇文章;)但要注意的关键点是有两种模式需要考虑:所有关于RVAs的讨论只有在PE被映射到内存并且对齐时才有意义 - 对准 . 当您从磁盘读取文件时,偏移量是文件偏移量,每个部分都使用文件对齐方式 .

    我希望这有帮助 .

相关问题