首页
社区
课程
招聘
[旧帖] 关于罗云彬老师《windows32位汇编程序设计》一书中内存地址与磁盘文件地址转换的疑问?? 0.00雪花
发表于: 2010-11-20 23:25 3499

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

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

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

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

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 38
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
请注意 书上讲的 是用内存映射文件 将文件映射到内存 即 内存中 文件结构忠于源PE文件,也就是说
此时你查找的 操作的 都是相当于 静态的PE文件 因此用磁盘存储 相关的 SizeOfRawData 成员
当你加载PE文件后(比如 LoadLibary) 即 按照虚拟地址 加载到内存 此时 内存中各部分的关系 才是 虚拟地址相关的关系 此时用 VirtualSize 就行
2010-11-20 23:32
0
雪    币: 171
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不是啊,我上面的意思是,某一块节在内存中的开始RVA用VirtualAddress字段来确定,而同一块节的结束RVA 应是VirtualAddress字段值加上节的真实大小(VirtualSize)按sectionAlignment字段的值对齐才对啊。因为节在内存中的大小是节的真实大小根据sectionAlignment字段值在内存中的对齐值。

而罗老师书上说的,节的结束RVA是节的在内存中的开始RVA用VirtualAddress字段加上“真实大小(VirtualSize)按FileAlignment的值对齐后的值即节在文件磁盘上的对齐后的大小(SizeOfRawData)”。

这到底是什么原因呢??
2010-11-21 11:49
0
雪    币: 38
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
因为节在内存中的大小是节的真实大小根据sectionAlignment字段值在内存中的对齐值。
----------------------------------
你这句话 说错了 --

因为你用内存映射文件 所以虽然文件 被 映射 到 内存 但是 其数据之间的相对位置 关系 与 磁盘文件 一致
不是 到 内存 就是 像你所说的那样的
2010-11-21 15:23
0
雪    币: 403
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我是这样理解的不知道对不对。 一个节在内存中的起始RVA 和在节在磁盘文件中所占的空间大小SizeOfRawData   实际上到这里一个节的有用的信息 已经结束了 但是 节和节在内存中要对齐  所以就要填充。 我想  并根据节的大小(SizeOfRawData字段) 算出节的结束RVA,最后比较判断目标RVA是否落在某个节之内  应该是这个意思吧。  这是我这个小菜的理解  要是说的不对 请指正  我在这先谢了!
2010-11-21 19:35
0
雪    币: 171
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
应该不是,因为一块节的真实大小如果是400KB,那他在磁盘上占512KB的空间,其中120KB是0,而在内存中同样的这块节,却占1000KB,有600KB的0。
而“SizeOfRawData”在这里其实就是512KB,如果这节在内存中的RVA是1200,那他在内存中的结束RVA应是2200,而不是1200+512了
2010-11-21 21:09
0
游客
登录 | 注册 方可回帖
返回
//