PIMAGE_SECTION_HEADER VirtualAddress 和 PointerToRawData 字段

use*_*138 1 windows executable exe portable-executable

便携式可执行文件中 IMAGE_SECTION_HEADER 结构(在 WinNt.h 中声明)的 VirtualAddress 和 PointerToRawData 字段之间有什么区别?为什么我们有这两个不同的领域,它们的真正含义是什么?

Ale*_*nze 6

PointerToRawData告诉您代码/数据在文件中的位置。VirtualAddress是它应该加载到内存中的位置。

  • 这两件事的关系非常松散,你不应该假设一个大于或等于另一个。另外两篇关于 PE 的文章:[1](http://msdn.microsoft.com/en-us/magazine/ms809762.aspx)、[2](http://msdn.microsoft.com/en-us/magazine /cc301805.aspx)。 (2认同)
  • 我认为这很简单。他没有使用 `fread()` 等从磁盘读取文件,而是将整个文件按原样映射到内存中。因此所有`PointerToRawData's 都成为相对内存地址。因此,`base`+`RVA` 和`base`+`PointerToRawData` 变得相关,它们的区别(`delta`)是应该加载文件块的位置(由操作系统执行)和它实际加载的位置(通过 PEdump)。他正在考虑这种差异。 (2认同)