重定位表

​ 当链接器生成一个PE文件时,会假设这个文件在执行时被装载到默认的基地址处(基地址+RVA就是VA)。并把code和data的相关地址写入PE文件。如果像EXE一样首先加载就是它imageBase没问题能算出真正的VA,但是要有多个DLL文件,就会出现基址不对的问题,通过基址+RVA算出来的数据地址和函数地址就会出问题(链接器算的)需要重定位表来调整。在PE文件中重定位表往往单独作为一个节用“.reloc”表示。

#define IMAGE_DIRECTORY_ENTRY_BASERELOC //重定位表地址
重定位表位于.reloc节内通过_IMAGE_BASE_RELOCATION来组织
typedef struct _IMAGE_BASE_RELOCATION {
DWORD VirtualAddress;
DWORD SizeOfBlock;
// WORD TypeOffset[1];
} IMAGE_BASE_RELOCATION;
  1. VirtualAddress:指的是下面这组数据(4KB页内需要重定位的数据个数)的开始RVA地址也就是说这个内存页基址。下面的是RVA的RVA大小为2个字节(后面12个位)。
  2. SizeOfBlock:当前重定位结构的大小,这个值减去2个DWORD(VirtualAddress和SizeOfBlock)就是下面需要重定位的地址数组大小。

重定位表只是让本PE能够正确运行的东西。修正本PE的值。

最新文章

  1. NUOJ 88
  2. C# Excel处理工具
  3. Lock读写锁技术的妙用
  4. apache AllowEncodedSlashes 允许URL中对路径分隔符进行编码
  5. sql索引组织
  6. Node.js:util.inherits 面向对象特性【原型】
  7. WebBrowser控件应用:弹出新窗体和关闭窗口
  8. [转]JAVA三大框架SSH和MVC
  9. python 自动化之路 day 01 人生若只如初见
  10. W3C vs. WHATWG HTML5 Specs – The Differences Documented
  11. python2.7学习记录之二
  12. 从并发处理谈PHP进程间通信(一)外部介质
  13. 51Nod - 1384 正常解法
  14. pom.xml中添加远程仓库
  15. Magento 2数据库EAV模型结构
  16. Linux下的两个经典宏定义 转
  17. 总结day24 ---- socket ,struct 的学习
  18. JS正则表达式的分组匹配
  19. thinkjphp 模板中获取url中的action
  20. 深入理解Redis主键失效原理及实现机制(转)

热门文章

  1. vue的高级使用技巧
  2. 「AT2292」Division into Two
  3. 嵊州普及Day6T1
  4. jdk环境变量、maven环境变量、Mysql环境变量配置
  5. Windows驱动开发-内核常用内存函数
  6. 8051单片机中访问int中字节的方法
  7. brew services start redis 无法使用问题排查
  8. HTML速写
  9. Golang gin开源实例——表设计
  10. 99乘法表(for循环嵌套)