重定位表

​ 当链接器生成一个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的值。

逆向-PE重定位表的更多相关文章

  1. 【旧文章搬运】PE重定位表学习手记

    原文发表于百度空间,2008-11-02========================================================================== 先定义一下 ...

  2. Windows PE 重定位表编程(枚举重定位地址)

    原理之前单独总结过,在这里: http://blog.csdn.net/u013761036/article/details/54051347 下面是枚举重定位信息的代码: // ReLocation ...

  3. WindowsPE权威指南-PE文件头中的重定位表

    PE加载的过程 任何一个EXE程序会被分配4GB的内存空间,用户层处理低2G的内存,驱动处理高2G的内存. 1.双击EXE程序,操作系统开辟一个4GB的空间. 2.从ImageBase决定了加载后的基 ...

  4. PE结构之重定位表

    什么是重定位: 重定位就是你本来这个程序理论上要占据这个地址,但是由于某种原因,这个地址现在不能让你占用,你必须转移到别的地址,这就需要基址重定位.你可能会问,不是说过每个进程都有自己独立的虚拟地址空 ...

  5. PE格式第七讲,重定位表

    PE格式第七讲,重定位表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶何为重定位(注意,不是重定位表格) 首先, ...

  6. PE知识复习之PE的重定位表

    PE知识复习之PE的重定位表 一丶何为重定位 重定位的意思就是修正偏移的意思.  如一个地址位 0x401234 ,Imagebase = 0x400000 . 那么RVA就是 1234.  如果Im ...

  7. PE文件 03 重定位表

    0x01  重定位表结构   重定位表是由数据目录表中的第六个成员指出的: typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress; D ...

  8. Windows PE第6章 栈与重定位表

    第六章 栈与重定位表 本章主要介绍栈和代码重定位.站和重定位表两者并没有必然的联系,但都和代码有关.栈描述的是代码运行过程中,操作系统为调度程序之间相互调用关系,或临时存放操作数而设置的一种数据结构. ...

  9. Reverse Core 第二部分 - 16&17章 - 基址重定位表&.reloc节区

    第16-17章 - 基址重定位表&.reloc节区 @date: 2016/11/31 @author: dlive 0x00 前言 这几天忙着挖邮箱漏洞,吃火锅,马上要被关禁闭,看书进度比较 ...

随机推荐

  1. Java 后端压缩图片

    import java.io.*;import java.util.Date;import java.awt.*;import java.awt.image.*;import javax.imagei ...

  2. Hystrix熔断机制导致误报请求超时错误

    问题的过程如下: (1)前端向服务端请求往HBase插入1000条数据: (2)请求经路由网关Zuul传递给HBaseService,HBaseService执行插入操作: (3)插入操作需要的时间超 ...

  3. oracle练习-day01

    .基础查询 yearly .条件查询小于的员工 ; ;的员工;  ,,); .模糊查询.排序.字符函数,) test .数值函数.,),round(.,),round(.) .,.),trunc(., ...

  4. Fiddler抓取HTTPS

    对于想抓取HTTPS的测试初学者来说,常用的工具就是fiddler.可是在初学时,大家对于fiddler如何抓取HTTPS真是伤了脑筋,可能你一步步按着网上的帖子成功了,那当然是极好的. 有可能没有成 ...

  5. There is no Action mapped for action name hello.

  6. L/SQL Developer 和 instantclient客户端安装配置

    PL/SQL Developer 和 instantclient客户端安装配置(图文) 一: PL/SQL Developer 安装 下载安装文件安装,我这里的版本号是PLSQL7.1.4.1391, ...

  7. Python 绘图

    python绘图库有很多,底层的就是matplotlib,另外还有基于matplotlib的更方便,代码可读性更强的库,比如seaborn.plotnine等.各个库之间的对比: https://ww ...

  8. 设置zabbix (3.4.2)添加监控项,触发器,让CPU使用超过85%就报警:

    zabbix (3.4.2)添加监控项,触发器,让CPU使用超过85%就报警: zabbix自带模板有一个 Template OS Linux模板.这个模板有监控CPU的监控项,如果没有添加一个监控项 ...

  9. Binary Tree和Binary Search Tree

    Binary TreeDefinition: at most two children node. Binary Tree Example: 10 ==root /      \ 13        ...

  10. 51nod 1433:0和5

    1433 0和5 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  取消关注 小K手中有n张牌,每张牌上有一个一位数的数, ...