节表和节——PE文件到内存的映射

26 篇文章 0 订阅

 

节表和节——PE文件到内存的映射 

 

 

.data  :未初始化的数据

Rsize:只存有用数据

 

 

 

PE文件执行时 ,Windows装载器建立好虚拟地址和PE文件之间的映射关系

 

Windows装载器在装载DOS部分、PE文件头部分和节表部分时不进行任何处理

 

装载节的时候将根据节的属性做不同的处理

     内存页的属性

     节的偏移地址

     节的尺寸

     不进行映射的节

 

 

节表和节——节表

 

PE文件头后是节表,在winnt.h下如下定义

typedef struct _IMAGE_SECTION_HEADER {

BYTE Name[IMAGE_SIZEOF_SHORT_NAME];//节表名称,如“.text”

//IMAGE_SIZEOF_SHORT_NAME=8

union {

DWORD PhysicalAddress;//物理地址

DWORD VirtualSize;//真实长度,这两个值是一个联合结构,可以使用其中的任何一个,

//一般是节的数据大小

} Misc;

DWORD VirtualAddress;//RVA

DWORD SizeOfRawData;//物理长度

DWORD PointerToRawData;//节基于文件的偏移量

DWORD PointerToRelocations;//重定位的偏移

DWORD PointerToLinenumbers;//行号表的偏移

WORD NumberOfRelocations;//重定位项数目

WORD NumberOfLinenumbers;//行号表的数目

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

} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;

 

 

Name1字段

     定义了节的名称

     .text   .data   .rdata  .rsrc

VirtualSize字段

     节的数据在没有进行对齐处理前的实际大小

 VirtualAddress字段

     节被装载到内存中后的偏移地址 RVA

     SectionAlignment的值的整数倍

PointerToRawData字段

     节在磁盘文件中的所处的位置

SizeOfRawData字段

     节在磁盘文件中所占的空间大小

     VirtualSize字段的值按照FileAlignment的值对齐以后的大小 

Characteristics字段

重要的节属性定义:

#define IMAGE_SCN_CNT_CODE 00000020h // 节中包含代码

#define IMAGE_SCN_CNT_INITIALIZED_DATA 00000040h // 节中包含已初始化数据

#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 00000080h // 节中包含未初始化数据

#define IMAGE_SCN_MEM_DISCARDABLE 02000000h

// 是一个可丢弃的节,即节中的数据在进程开始后将被丢弃

#define IMAGE_SCN_MEM_NOT_CACHED 04000000h // 节中数据不经过缓存

#define IMAGE_SCN_MEM_NOT_PAGED 08000000h // 节中数据不被交换出内存

#define IMAGE_SCN_MEM_SHARED 10000000h // 节中数据可共享

#define IMAGE_SCN_MEM_EXECUTE 20000000h // 可执行节

#define IMAGE_SCN_MEM_READ 40000000h // 可读节

#define IMAGE_SCN_MEM_WRITE 80000000h // 可写节

代码节属性 —— 60000020h

数据节属性—— c0000040h

常量节属性 —— 40000040h

 

 

 

Name:节名称

VOffset:相对于ImageBase的虚拟偏移(内存中)

VSize:实际大小,有效数据的大小(文件中)

ROffset:相对于文件起始处的偏移(文件中)

RSize所占的文件空间大小(文件中),rsize是在文件中的大小,因为被填充的也存在文件中

Flags:节属性

 

 

 

 

节表和节——节

 “节(Section)”跟在节表之后,一般PE文件都有几个“节”。比较常见的有:

代码节

已初始化的数据节

未初始化的数据节

资源节

引入函数节

引出函数节

 

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值