+ -
当前位置:首页 → 问答吧 → 关于罗云彬老师《windows32位汇编程序设计》一书中内存地址与磁盘文件地址转换的疑问??

关于罗云彬老师《windows32位汇编程序设计》一书中内存地址与磁盘文件地址转换的疑问??

时间:2010-11-20

来源:互联网

在《windows32位汇编程序设计》一书中的第17章的634有这么一段话:
  1、循环扫描节表并得到每个节在内存中的起始RVA(根据VirtualAddress字段),并根据节的大小(SizeOfRawData字段)算出节的结束RVA,最后比较判断目标RVA是否落在某个节之内

  在这里节的结束RVA怎么是用“VirtualAddress字段与SizeOfRawData字段”来得来呢?
SizeOfRawData是节在磁盘中的大小是根据VirtualSize字段的值按照FileAlignment的值对齐后的大小。
  节的结束RVA应是VirtualAddress字段值加上VirtualSize字段的值按照sectionAlignment字段的值对齐后的大小啊??

  我开始以为是书印错了,但一看后面的实例也是这样,不知这到底是什么原因?请高手帮帮忙。。

作者: wudehui952855320   发布时间: 2010-11-20

也许可以这样想,如果都是对齐的数据,就求必要一定用FileAlignment值了吧。

作者: asmlearn   发布时间: 2010-11-21

你现在读取的是磁盘的文件,所以对齐采用的是FileAlignment。如果采用了sectionAlignment,那么可能会把下一个节的内容也给包含进去了。
~~
对齐会使得节与节之间存在空隙,在节的尾部存在有一些空间没用上,对齐值越大空隙越多。

作者: wuxupeng999   发布时间: 2010-11-21