博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
节表和节——PE文件到内存的映射
阅读量:2065 次
发布时间:2019-04-29

本文共 1848 字,大约阅读时间需要 6 分钟。

 

节表和节——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文件都有几个“节”。比较常见的有:

代码节

已初始化的数据节

未初始化的数据节

资源节

引入函数节

引出函数节

 

 

 

 

转载地址:http://tpumf.baihongyu.com/

你可能感兴趣的文章
Windows下使用VS2015编译openssl库
查看>>
Win10+VS2015编译libcurl
查看>>
Windows下使用jsoncpp
查看>>
Ubuntu下测试使用Nginx+uWsgi+Django
查看>>
Windows下编译x264
查看>>
visual studio调试内存泄漏工具
查看>>
开源Faac实现PCM编码AAC
查看>>
Windows下wave API 音频采集
查看>>
借船过河:一个据说能看穿你的人性和欲望的心理测试
查看>>
AndroidStudio 导入三方库使用
查看>>
Ubuntu解决gcc编译报错/usr/bin/ld: cannot find -lstdc++
查看>>
解决Ubuntu14.04 - 16.10版本 cheese摄像头灯亮却黑屏问题
查看>>
解决Ubuntu 64bit下使用交叉编译链提示error while loading shared libraries: libz.so.1
查看>>
MFC程序添加console窗口+printf打印输出信息
查看>>
VS生成DLL文件供第三方调用
查看>>
Android Studio color和font设置
查看>>
android GLSurfaceView匹配屏幕宽度及视频宽高比设置view大小
查看>>
解决用android Studio开发不能去除标题栏的问题
查看>>
[Python] windows下360急速浏览器获取URL的Headers
查看>>
AndroidStudio 清除无用资源压缩项目大小
查看>>