解决随机基址或是函数随机地址问题,可以有两种方法。
1.修改入口点函数,根据相对地址偏移的方法。
2:重定位表的内容:
pRelocationDirectory_RVA:3cc000
pRelocationDirectory_FOA:3a3000
VirtualAddress :00001000
SizeOfBlock :000000D8
================= BlockData Start ======================
第[0001]项 数据项的数据为:[0006] 数据属性为:[3] RVA的地址为:[00001006] 重定位的数据:[68264000]
第[0002]项 数据项的数据为:[0030] 数据属性为:[3] RVA的地址为:[00001030] 重定位的数据:[6826400C]
第[0003]项 数据项的数据为:[0044] 数据属性为:[3] RVA的地址为:[00001044] 重定位的数据:[6826400C]
第[0004]项 数据项的数据为:[0059] 数据属性为:[3] RVA的地址为:[00001059] 重定位的数据:[68289210]
表数据说明: 每个重定位数据由两个字节组成,高4位表示的是重定位的类型,低12位标识的是需要修改偏移的地址。 高4位是3表示的是需要重定位。
例如,第[0001]项 数据项的数据为:[0006] 数据属性为:[3] RVA的地址为:[00001006] 重定位的数据:[68264000];
RVA里面的地址1006的数据内容是68264000,相当于注册在重定位表里面,dll加载时会自动修改68264000的基址地址。
demo程序下载路径:
https://download.youkuaiyun.com/download/onlyfunboy/19515908

本文介绍了解决随机基址及函数随机地址问题的两种方法:一是修改入口点函数,采用相对地址偏移;二是利用重定位表进行地址调整。通过具体示例解析了重定位表的工作原理。
3463

被折叠的 条评论
为什么被折叠?



