0x00 PE文件格式
PE文件格式是可执行文件的数据格式(.dll、.exe)
1) .text:由编译器产生,存放二进制的机器指令,是反汇编和调试的主要对象
2) .data:初始化的数据块,如宏定义,全局变量等
3) .idata:使用DLL等外来函数与文件的信息,即输入表
4) .rsrc:存放程序的全部资源,如图标、菜单、位图等
0x01 虚拟内存及地址转换
物理内存:进入windows内核级别ring0才能看到
虚拟内存:调试器中看到的内存地址;区别于OS中的虚拟内存1) 文件偏移地址(File Offest):数据在PE文件中的地址,即文件在磁盘上存放时相对于文件开头的偏移,在静态反汇编工具看到
2) 装载基址(Image Base): PE文件被载入内存后的首地址,exe文件默认0x00400000,dll文件默认0x10000000。可通过修改编译选项更改。
3) 虚拟地址VA(Virtual Address): PE文件中的数据映射到内存后的地址
4) 相对虚拟地址RVA(Relative VA):RVA=VA-Image Base,即虚拟地址相对于映射基址的偏移相对区段偏移(Relative Section Offset):数据相对所在区段首地址的偏移。
Relative Section Offset = RVA – VOffset = File Offset - ROffset文件偏移(File Offset) = ROffset + Relative Section Offset
= ROffset + RVA – VOffset
= ROffset + VA – Image Base - VOffsetPE文件存储在磁盘上时,以0x200字节为基本单位来组织数据。PE文件被映射到内存中时,以0x1000字节为基本单位来组织数据。
eg:若某数据的文件偏移地址(FileOffset)是0x420,求VA.
用LordPE打开一个.exe文件
VOffset:各区段的相对偏移地址(RVA),各区段在内存中的首地址偏移
ROffset:各区段的文件偏移地址,即各区段在物理磁盘上的首地址偏移.txt的ROffse = 0x400 ==>>>该数据在txt段
VA = File Offset – ROffset + VOffset + Image Base
= 0x420 – 0x400 + 0x1000 + 0x400000 = 0x401020
——《0day安全》学习笔记