PE文件学习笔记(3)

The Section Table

 

这个字段位于PE 表头和真正的 section 资料之间,其中内含 image 的
每一个sections 的信息。

 

section table 的每一笔资料贮存了一个地址,
在那里,文件的原始资料被映像到内存。虽然sections 类似 32 位的

 

segments ,事实上它们不是一个个的 segments ,而是行程虚拟地址空间中

 

一块内存范围。

而且PE中的大部分重要的code 或 data 都会被存放在一个section 之中。也就

 

是说程序或作业系统所需的任何 code 或 data 都可能有它自己的 section 。

对于相比之下的NE文件老说就不是这样,因为有许多code或data都未被重视然

 

后存储在NE表头的边缘

 

 

 IMAGE_SECTION_HEADER 的结构组成如下

 

 

1. BYTE Name[IMAGE_SIZEOF_SHORT_NAME]

    表示 section 名称,例如 ".text"。在C++中#pragma code_seg 或

 

    #pragma data_seg 方式可以创建自己的数据段,这一点曾经在dll中尝试过

 

    并且还设置了共享的属性来使多个进程使用!

 

2. union {DWORD PhysicalAddress;
  

               DWORD VirtualSize;

            } Misc;

     在 EXE 中它代表 code section 或 data section 的虚拟大小,这是在它

 

们被调整之前的大小,而还有的SizeOfRawData 字段则是调整后的大小。

3. DWORD VirtualAddress

 

    代表加载器应该将 section 映像过去的 RVA 位置。为了计算section 的真

 

    正起始地址,你必须将此值再加上基地址。微软的工具把第一个 section 的

    此一字段设为 0x1000 。

 

4.DWORD SizeOfRawData

   这个字段代表 section 大小被调整后的值。所谓调整就是将所有section的大

 

   小扩展成为file-alignment的整数倍。当然要是最接近的整数倍。

 

5. DWORD PointerToRawData

    这是以文件起头为基准的偏移值,section 的原始资料可以在该处寻获。相对

 

    来说比较重要。

6.DWORD PointerToRelocations

    在 EXEs 中,这个栏位(以及下一字段)没有意义,总是为 0 。

 

7.DWORD PointerToLinenumbers

   行号表的偏移值,与CodeView 除错有关,行号信息被收集放在文件的最尾端

 

8. WORD NumberOfRelocations

    重定位项目个数,只用于OBJ

 

9.WORD NumberOfLinenumbers

   由 PointerToLinenumbers 指向的行号表格中的行号个数。

 

10. DWORD Characteristics

    这个字段是一组旗标值,用来表示 section 中的属性,可读可写共享等

 

    等。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值