PE导出表、重定位详解

本文详细介绍了PE文件的导出表和重定位信息,包括导出表的结构、如何转换虚拟地址到相对文件地址,以及重定位表的数据结构和计算重定位位置的方法。通过实例展示了如何查找导出函数地址和进行重定位操作。
摘要由CSDN通过智能技术生成

此文档主要讲解导出表,重定位信息:

使用例子为: Windows.UI.Xaml.dll、010editor

1、导出表,重定位表的地址存放在哪里

DOS头-àPE头文件(_IMAGE_NT_HEADERS)-à扩展头(IMAGE_OPTIONAL_HEADER32)-à数据目录表

数据目录表中的内容:

structIMAGE_DATA_DIRECTORY  Export                   (1)

……

StructIMAGE_DATA_DIRECTORY BaseRelocationTable (6)

 

Typedef  struct IMAGE_DATA_DIRECTORY {

DWORDVirtualAddress ; //此处地址为在内存中的地址

DWORD  size ;

}

如下图信息:


2、这里是VirtualAddress,如何转变成相对文件地址:

根据pe文件的区段表进行转换:

去段表的结构:

Typedefstruct  _IMAGE_SECTION_HEADER{

BYTEName[0x8];

Union{

DWORDPhysicalAddress;

DWORDVirtualSize ;

}

DWORDVirualAddress ;

DWORDSzieOfRawData;

DWORDPointerToRawData;

DWORDPointerToRelocations;

DWORDPointerToLinenumbers;

WORDNumberOfRelocations;

WORDNumberOfLinenumbers;

DWORDCharacteristics;

}

查看需要转换的RVA在哪一个区段中。比如:VirualAddress (比如:此地址为第一个模块地址)<RVA <VirualAddres(第二个模块地址),那么RVA应该依据第一个模块进行转换:RVA-VirualAddress+PointerToRawData=offset(相对文件偏移)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值