解决随机基址或是函数随机地址问题,可以有两种方法。
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程序下载路径: