PE结构学习笔记(四)

Chinese:

这个篇幅将通过一个具体实例来从16进制文本中找到区块表

1、首先用一个16进制编辑器(UltraEdit, WinHex etc..)打开一个可执行文件(exe)

2、在00000200h找到PE Header,+04h的偏移地址是File Header,+14h的地址记录了IMAGE_OPTIONAL_HEADER32结构的大小

3、+18h是OptionalHeader,OptionalHeader的地址加上SizeOfOptionalHeader即为区块表的地址:00000218h + E0h = 000002F8h

4、区块表结构如下:

typedef struct IMAGE_SECTION_HEADER

{

BYTE Name[IMAGE_SIZEOF_SHORT_NAME];  //节表名称,如".text", IMAGE_SIZEOF_SHORT_NAME=4

union

{

DWORD PhysicalAddress;  //物理地址

DWORD VirtualSize;  //真实长度

} Misc;

DWORD VirtualAddress;  //节区的RVA地址

DWORD SizeOfRawData;  //在文件中对齐后的尺寸

DWORD PointerToRawData;  //在文件中的偏移量

DWORD PointerToRelocations;  //在obj文件中使用,重定位的偏移

DWORD PointerToLinenumbers;  //行号表的偏移(供调试使用地)

WORD NumberOfRelocations;  //在ojb文件中使用,重定位项数目

WORD NumberOfLinenumbers;  //行号表中行号的属木

DWORD Characteristics;  //节属性 如可读、可写、可执行等

} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;

 

可以算出每个区块表的结构占40个字节,专成16进制就是28h,也就是说第二个区块表的地址是0x000002F8h + 28h = 0x00000320h

5、同理可以算出第三个、第四个、第五个。。。

转载于:https://www.cnblogs.com/maplewan/p/3231343.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值