取之网络,还于网络,请大家多多指点,多数都是在网上看到的,手抄不易,多谢!
PE文件是什么?
PE(Protable Execute) 是Windows下可执行的文件,常见有DLL(动态库)Exe(可直接运行的程序)OCX(络,还于网络,请大家多多指点,多数都是在网上看到的,手抄不易,多谢!
PE文件是什么?PE(Protable Execute) 是Windows下可执行的文件,常见有DLL(动态库)Exe(可直接运行的程序)OCX(组件)SYS(驱动程序)等…,一个文件是否是PE文件与其扩展名无关,PE可以是任何扩展名。
PE文件的结构一般来说 分为起始位置DOS头,DOS块,NT头节表,及具体的节。
先来看ODS头结构:
typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header
USHORT e_magic; // Magic number
USHORT e_cblp; // Bytes on last page of file
USHORT e_cp; // Pages in file
USHORT e_crlc; // Relocations
USHORT e_cparhdr; // Size of header in paragraphs
USHORT e_minalloc; // Minimum extra paragraphs needed
USHORT e_maxalloc; // Maximum extra paragraphs needed
USHORT e_ss; // Initial (relative) SS value
USHORT e_sp; // Initial SP value
USHORT e_csum; // Checksum
USHORT e_ip; // Initial IP value
USHORT e_cs; // Initial (relative) CS value
USHORT e_lfarlc; // File address of relocation table
USHORT e_ovno; // Overlay number
USHORT e_res[4]; // Reserved words
USHORT e_oemid; // OEM identifier (for e_oeminfo)
USHORT e_oeminfo; // OEM information; e_oemid specific
USHORT e_res2[10]; // Reserved words
LONG e_lfanew; // File address of new exe header
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
DOS头是用来兼容MS-DOS操作系统的,及指明NT的位置 目前DOS头只用到USHORT e_magic; //'MZ’头标识 和LONG e_lfanew; //定义到NT头的位置,跳过DOS和DOS块之间找到NT头。_IMAGE_DOS_HEADER结构体有64字节
DOS块 省略…
NT 头(PE头)先来看一下结构体
typedef struct _IMAGE_NT_HEADERS {
ULONG Signature;
IMAGE_FILE_HEADER FileHeader;//PE文件头
IMAGE_OPTIONAL_HEADER32 OptionalHeader;//PE可选头(其实是必不可少的头)
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
ULONG Signature;//类似DOS头的标识,以十六进制查看为字母’PE’
看一下IMAGE_FILE_HEADER 结构体:
typedef struct _IMAGE_FILE_HEADER {
USHORT Machine;//该文件运行的平台
USHORT NumberOfSections;
ULONG TimeDateStamp;
ULONG PointerToSymbolTable;
ULONG NumberOfSymbols;
USHORT SizeOfOptionalHeader;
USHORT Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
不想写了 By