首页
社区
课程
招聘
《逆向工程核心原理》25章的一个问题
发表于: 2016-12-21 09:57 5170

《逆向工程核心原理》25章的一个问题

2016-12-21 09:57
5170

求助各位一个小问题:

在《逆向工程核心原理》第25章 通过修改PE加载DLL中,说到在.rdata节区尾部的Null-Padding区域添加新的IDT的方法来加载新的DLL。如下图:



文中提到.rdata节区在在磁盘中的大小为2E00,加载到内存的大小为2C56(相对磁盘中大小变小了)
这个PE文件的FileAligment=200 SectionAligment=1000

问题1:磁盘中5200+2E00=8000是200的倍数(包含了Null-Padding),为什么内存中该节区的大小是2C56?(6000+2C56不是1000的倍数,不包含Null-Padding)?

问题2:文中提到在移动IDT到.rdata节区尾部的Null-Padding区域后又新增了一个IDD,为什么最后不用修改.rdata节区头的Virtual Size属性呢?

谢谢各位!


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 259
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
第一个,在内存中是整数对齐的,列如,535在内存中是1000,磁盘大小和内存大小对齐方式是不一样的
第二个,因为他不是增加节区的数目,只是用已有的节区的空白地方自己添加,所以不用修改大小
你想要了解相关知识,去学习windowsPE文件结构就知道了.
2016-12-21 14:50
0
雪    币: 1032
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢答疑:
1. “磁盘大小和内存大小对齐方式是不一样的”这个我明白,对齐大小是PE的FileAligment和SectionAligment决定的,但是在内存中.rdata这个节区的RVA=6000,virtual size=2C56, 6000+2C56= 8C56 并不是SectionAligment(=1000)的整数倍,用winhex查看过2C56只包含了有数据的大小,节区后面为了对齐的Null-Padding并没有算进去,但是size of raw data却算进去了
2. 问题2同上 Virtual Size大小因为在节区中新增了一个IID结构,如果virtual size确实只包含数据的大小,那新增了一个IID结构的数据后,virtual size为什么不用修改。
2016-12-21 15:55
0
雪    币: 1032
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢答疑:
1. “磁盘大小和内存大小对齐方式是不一样的”这个我明白,对齐大小是PE的FileAligment和SectionAligment决定的,但是在内存中.rdata这个节区的RVA=6000,virtual size=2C56, 6000+2C56= 8C56 并不是SectionAligment(=1000)的整数倍,用winhex查看过2C56只包含了有数据的大小,节区后面为了对齐的Null-Padding并没有算进去,但是size of raw data却算进去了
2. 问题2同上 Virtual Size大小因为在节区中新增了一个IID结构,如果virtual size确实只包含数据的大小,那新增了一个IID结构的数据后,virtual size为什么不用修改。
2016-12-21 15:56
0
雪    币: 244
活跃值: (64)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
第一个,在内存中是整数对齐的,列如,535在内存中是1000,磁盘大小和内存大小对齐方式是不一样的,补充一下,申请内存时只能按页大小申请,也就是说虽然在内存中只有535,但是实际上还是要申请1000的空间,在加载的时候,至拷贝535的数据到内存中看,剩余的是什么数据就不太清楚了。
第二个,注意是要么在最后一个节空白地方加数据或增加新节,空白位置指包含在最后一个节内,最后一个节足够的时候直接写进去就好,但是不够的时候才会增加新节,当然也可以扩大最后一个节,上面可能没有描述清楚。
2016-12-21 17:11
0
游客
登录 | 注册 方可回帖
返回
//