0day笔记(1)PE文件格式与虚拟文件内存的映射
其他
2020-06-26 11:08:38
阅读次数: 0
PE文件格式
- PE 文件格式把可执行文件分成若干个数据节(section),不同的资源被存放在不同的节中。 一个典型的 PE 文件中包含的节如下:
- .text 存放着二进制的机器代码
- .data 初始化的数据块,如宏定义、全局变量、静态变量等。
- .idata 可执行文件所使用的动态链接库等外来函数与文件的信息。
- .rsrc 存放程序的资源,如图标、菜单等。
- 除此以外,还可能出现的节包括“.reloc”、“.edata”、“.tls”、“.rdata”等。
- 某些加壳处理会影响节信息
PE 文件与虚拟内存之间的映射
- 文件偏移地址: 文件中的数据,二进制代码等相对于文件头部的偏移地址
- 装载基址:文件加载进内存时的文件头部的地址
- 默认情况下,EXE 文件在内存中的基地址是 0x00400000,DLL 文件是 0x10000000。这些位置可以通过修改编译选项更改
- 虚拟内存地址: PE中的指令数据等加载进内存后的地址
- 相对虚拟地址: 相对虚拟地址是内存地址相对于映射基址的偏移量。
- 虚拟内存地址 != 装载基址+文件偏移地址
- 相对虚拟地址 = 虚拟内存地址 - 装载基址
- 造成相对相对虚拟地址与文件偏移地址的差异的原因:
- PE 文件中的数据按照磁盘数据标准存放,以 0x200 字节为基本单位进行组织。
- 当代码装入内存后,将按照内存数据标准存放,并以 0x1000 字节为基本单位进行组织
- 不够一个基本单位填充 0x00 ,永远是基本单位的整数倍
使用lord PE可查看修改内存关系
- 文件偏移地址 = 虚拟内存地址(VA)- 装载基址(Image Base)- 节偏移
- 节偏移 = 文件偏移地址- 虚拟内存地址
转载自blog.csdn.net/weixin_45551083/article/details/104211122