PE文件介绍 (2)-DOS头,DOS存根,NT头

PE头

PE头由许多结构体组成,现在开始逐一学习各结构体

0X00 DOS头

微软创建PE文件格式时,人们正广泛使用DOS文件,所以微软充分考虑了PE文件对DOS文件的兼容性。其结果是在PE头的最前面添加一个 IMAGE_DOS_HEADER 结构体用来扩展DOSEXE头

IMAGE_DOS_HEADER

typedef struct _IMAGE_DOS_HEADER
{
     WORD e_magic;  //DOS签名 4D5A
     WORD e_cblp;
     WORD e_cp;
     WORD e_crlc;
     WORD e_cparhdr;
     WORD e_minalloc;
     WORD e_maxalloc;
     WORD e_ss;
     WORD e_sp;
     WORD e_csum;
     WORD e_ip;
     WORD e_cs;
     WORD e_lfarlc;
     WORD e_ovno;
     WORD e_res[4];
     WORD e_oemid;
     WORD e_oeminfo;
     WORD e_res2[10];
     LONG e_lfanew;   //指向NT头所在的位置
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

IMAGE_DOS_HEADER 结构体的大小位64字节,一个WORD类型两个字节时一个字,一个LONG类型是四个字节两个字,所以该结构体为 30个WORD类型+ 1个LONG类型 为 64字节。

在该结构体中必须知道2个重要的成员:e_magice_lfanew

  • e_magic: DOS签名(4D5A => ASCLL值 “MZ”)
  • e_lfanew: 指示NT头的偏移(不同的文件该值不一样)

0X01 使用Hxd在电脑中查看PE格式

把炉石传说的客户端放入Hxd软件中查看

从图中可以看出标黄的是DOS签名4D5A为MZ,整个红框为 DOS头64个字节,最底下绿色框标出来的为NT文件头所在位置 0X00000120 Intel系列CPU以逆序存储数据,这称为小端序标识法。这些是值被修改后将不能够运行(根据PE规范,它以不再是PE文件)。

0X02 DOS存根

DOS存根在DOS头下面,是个可选项,且大小不固定(即使没有DOS存根,文件也能正常运行)DOS存根由代码与数据混合而成下图为炉石传说的客户端的DOS存根

DOS存根的大小不固定,从0x40开始到NT头截至。图中文件偏移40-4D区域为16位汇编指令。32位windows OS中直接忽略该命令。

原文地址:https://www.cnblogs.com/mhpcuit/p/12435695.html

时间: 2024-11-03 22:07:38

PE文件介绍 (2)-DOS头,DOS存根,NT头的相关文章

win32下PE文件分析之NT头

接上一篇的win32下PE文件分析之DOS头 (一)win32中PE的NT: NT头是PE文件中标准PE头和可选PE头的总体称谓,还包含一个PE标识.下面是它在Visual C++ 6.0中WINNT.h中的定义: typedef struct _IMAGE_NT_HEADERS64 {     DWORD Signature;     IMAGE_FILE_HEADER FileHeader;     IMAGE_OPTIONAL_HEADER64 OptionalHeader; } IMAG

win32下PE文件分析之DOS头

(一).win32下的PE文件: PE是Portable Execute的缩写,是可移植可执行的意思,只要文件的数据结构遵循PE结构,就属于PE文件,windows中常见的PE文件有 *.sys驱动类文件 *.dll动态链接库文件 *.exe可执行文件 *.ocx对象类别扩充组建 *.obj目标文件等. 同样,linux中使用的是ELF格式,和windows的PE格式有一定的差别,如: 可重定位文件*.o 可执行文件如/bin/ls等 共享目标文件*.so 核心转储文件core 都遵循ELF数据

PE 学习之路 —— DOS 头、NT 头

1. 前述 可执行文件的格式是操作系统本身执行机制的反映,理解它有助于对操作系统的深刻理解,掌握可执行文件的数据结构及其一些机理,是研究软件安全的必修课.`PE(Portable Executable File Format)`是目前 windows 平台上的主流可执行文件格式.PE 文件衍生于早期的 COFF 文件格式,描述 PE 格式及 COFF 文件的主要地方在 winnt.h 这个头文件,其中有一节叫 Image Format,如下: 该节给出了 DOS MZ 格式和 windows 3

linux设备驱动程序该添加哪些头文件以及驱动常用头文件介绍(转)

原文链接:http://blog.chinaunix.net/uid-22609852-id-3506475.html 驱动常用头文件介绍 #include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件.#include <asm/***.h> 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件.#include <mach/***.h> 是在linux-2.6.29/arch/ar

Dos批处理命令bat文件运行完以后自动关闭dos窗口的方法

Dos 批处理命令 bat Dos 批处理命令 bat 文件运行完以后自动关闭 dos 窗口的方法: ???? ? ? 很多人运行完批处理命令发现 dos 窗口不能自动关闭,那是因为你在 bat 文件中直接执行了需要运行的某些外部程序, 如果希望 dos 窗口自动关闭, 那么, 你可以使用 start 命令来执行该外部程序, 而不是直接写上一行来执行. 例子说 明: ???? ? ? start?"CS"?"c:\programme?files\cs\half-life.ex

你的第一个程序--基本输入输出介绍,头文件介绍

你的第一个程序--基本输入输出介绍,头文件介绍 一个梗:如果你想要学一门新语言,那么你要做的第一件事就是用它编一个hello world 那么c++的hello world 怎么写呢? #include<iostream> using namespace std; int main() { cout<<"hello world"; return 0; } 下面我会逐步解释代码: 头文件 一个程序的头文件的意义就相当于是你告诉电脑你要用那些东西 如这个程序的头文件

PE文件学习

本文链接:http://blog.csdn.net/u012763794/article/details/51469477 1.介绍 什么是PE文件? PE文件是windows操作系统下使用的可执行文件格式.32位就直接叫PE或PE32,64位的就PE+或PE32+,注意不是PE64哦!!!! 学习PE文件其实就是学习结构体,里面储存了如何加载到内存,从何处开始运行,运行需要那些dll,需要多大的栈和内存等 初识PE文件 看看大概包括那些结构体吧 2.PE头 下面实例是利用notepad.exe

手写PE文件(二)

[文章标题]: 纯手工编写的PE可执行程序 [文章作者]: Kinney [作者邮箱]: [email protected] [下载地址]: 自己搜索下载 [使用工具]: C32 [操作平台]: win 7 [作者声明]: 只是感兴趣,没有其他目的.失误之处敬请诸位大侠赐教! ---------------------------------------------------------------------------------------------------------------

手写PE文件(一)

DOS Header(IMAGE_DOS_HEADER)->64 Byte DOS头部 DOS Stub 112字节 "PE"00(Signature) 4个字节 IMAGE_FILE_HEADER  20个字节 PE文件头       IMAGE_OPTIONAL_HEADER32  96个字节 数据目录表         16*8=128个字节 IMAGE_SECTION_HEADER    40个字节 块表              IMAGE_SECTION_HEADER