一、PE文件
wiki:可移植可执行文件(Portable Executable,缩写PE)是一种用于可执行文件,目标文件和动态链接库的文件格式。主要使用在32位和64位的Windows操作系统上,“可移植的”是指该文件格式的通用性,可用于许多不同的操作系统和体系结构中。PE文件格式封装了Windows操作系统加载可执行程序代码时所必须的一些信息,这些信息包括动态链接库、API导入和导出表,资源管理数据和线程局部存储数据,在Windows NT操作系统中,PE文件格式主要用于EXE文件、DLL文件、.sys文件(驱动文件)和其他文件类型。
1.1 不同平台的二进制文件格式
Executable(.exe on windows, no suffix on Linux)
包含自己独立执行的代码。资源有可能要依赖外部的动态链接库
Dynamic Linked Library(.dll on windows,.so (Shared Library aka Shared Object) on Linux)
需要被其他文件加载(exe、dll、......)(所用函数:LoadLibrary)
Static Library (.lib on windows 、.a on Linux)
Mac OS X 使用Mach-o文件格式
Linux使用ELF文件格式
1.2 PE文件加载
每个进程都会有自己的虚拟内存空间,分为内核空间和用户空间,通过Executable Loader来加载对应的库文件,依次加载到用户空间内。
1.3 文件or镜像
文件:磁盘形式
映像:内存形式
1.4 tools
所有关于PE文件的结构定义在WinNT.h中,
tools:010Editor、X64dbg、....
char(1byte) word(2byte)dword(4byte)qword(8byte)
VA(Virtual Address虚拟地址) RVA(Relative Virtual Address相对虚拟地址)
RVA=VA-base
虚拟内存:
每个进程独立/隔离,32bit分配4GB(2^32),64bit分配256TB(2^48)
内存由操作系统管理,映射到物理内存,
磁盘文件位置与内存位置的关系:
二、PE文件具体内容
文件头、节区、各种属性表:导入导出表……
<