PE结构

PE文件结构 PE文件是Windows下可执行文件的总称,英文全称PortableExecutable可移植的可执行文件,常见的有exe、dll、sys、com、ocx对于了解(木马、免杀、病毒、外挂、内核),了解PE文件结构是非常有必要且非常重要的!代码段:可读可执行不可写数据段:可读可写不可执行资源段:可读不可执行不可写导入表(.idata):简称IAT表ImportAddressTable。 阅读详情

pe结构.pdf 下载:https://download.youkuaiyun.com/download/uvarandmethod/10406805

重温PE结构:

1、DOS头
struct _IMAGE_DOS_HEADER {
0x00 WORD e_magic;//"MZ标记" 用于判断是否为可执行文件.
0x02 WORD e_cblp;
0x04 WORD e_cp;
0x06 WORD e_crlc;
0x08 WORD e_cparhdr;
0x0a WORD e_minalloc;
0x0c WORD e_maxalloc;
0x0e WORD e_ss;
0x10 WORD e_sp;
0x12 WORD e_csum;
0x14 WORD e_ip;
0x16 WORD e_cs;
0x18 WORD e_lfarlc;
0x1a WORD e_ovno;
0x1c WORD e_res[4];
0x24 WORD e_oemid;
0x26 WORD e_oeminfo;
0x28 WORD e_res2[10];
0x3c DWORD e_lfanew;//PE头相对于文件的偏移,用于定位PE文件
};
2、NT    nt头遍历  https://blog.youkuaiyun.com/uVarAndMethod/article/details/90575526
struct _IMAGE_NT_HEADERS {
0x00 DWORD Signature;               //5045  pe标记
0x04 _IMAGE_FILE_HEADER FileHeader;//标准PE头
0x18 _IMAGE_OPTIONAL_HEADER OptionalHeader;//可选PE头
};

(1)、标准PE头
struct _IMAGE_FILE_HEADER {
0x00 WORD Machine;    //程序运行的CPU型号:0x0 任何处理器/0x14C 386及后续处理器
0x02 WORD NumberOfSections;//文件中存在的节的总数,如果要新增节或者合并节 就要修改这个值
0x04 DWORD TimeDateStamp;//时间戳:文件的创建时间(和操作系统的创建时间无关),编译器填写的
0x08 DWORD PointerToSymbolTable;
0x0c DWORD NumberOfSymbols;
0x10 WORD SizeOfOptionalHeader;//可选PE头的大小,32位PE文件默认E0h 64位PE文件默认为F0h  大小可以自定义.
0x12 WORD Characteristics;//每个位有不同的含义,可执行文件值为10F 即0 1 2 3 8位置1 
};
(2)、
struct _IMAGE_OPTIONAL_HEADER {
0x00 WORD Magic;    //说明文件类型:10B 32位下的PE文件     20B 64位下的PE文件
0x02 BYTE MajorLinkerVersion;
0x03 BYTE MinorLinkerVersion;
0x04 DWORD SizeOfCode;    //所有代码节的和,必须是FileAlignment的整数倍 编译器填的  没用
0x08 DWORD SizeOfInitializedData;//已初始化数据大小的和,必须是FileAlignment的整数倍 编译器填的  没用
0x0c DWORD SizeOfUninitializedData;//未初始化数据大小的和,必须是FileAlignment的整数倍 编译器填的  没用
0x10 DWORD AddressOfEntryPoint;//程序入口
0x14 DWORD BaseOfCode;//代码开始的基址,编译器填的   没用
0x18 DWORD BaseOfData;//数据开始的基址,编译器填的   没用
0x1c DWORD ImageBase; //内存镜像基址
0x20 DWORD SectionAlignment;//内存对齐
0x24 DWORD FileAlignment;//文件对齐
0x28 WORD MajorOperatingSystemVersion;
0x2a WORD MinorOperatingSystemVersion;
0x2c WORD MajorImageVersion;
0x2e WORD MinorImageVersion;
0x30 WORD MajorSubsystemVersion;
0x32 WORD MinorSubsystemVersion;
0x34 DWORD Win32VersionValue;
0x38 DWORD SizeOfImage;//内存中整个PE文件的映射的尺寸,可以比实际的值大,但必须是SectionAlignment的整数倍
0x3c DWORD SizeOfHeaders;//所有头+节表按照文件对齐后的大小,否则加载会出错
0x40 DWORD CheckSum;//校验和,一些系统文件有要求.用来判断文件是否被修改.
0x44 WORD Subsystem;
0x46 WORD DllCharacteristics;
0x48 DWORD SizeOfStackReserve;//初始化时保留的堆栈大小 
0x4c DWORD SizeOfStackCommit;//初始化时实际提交的大小
0x50 DWORD SizeOfHeapReserve;//初始化时保留的堆大小 
0x54 DWORD SizeOfHeapCommit;//初始化时实践提交的大小 
0x58 DWORD LoaderFlags;
0x5c DWORD NumberOfRvaAndSizes;//目录项数目
0x60 _IMAGE_DATA_DIRECTORY DataDirectory[16];
};

3、节表      节的描述信息;
IMAGE_SECTION_HEADER *pISH = (IMAGE_SECTION_HEADER *)((DWORD)pFileBuf + pIDH->e_lfanew + sizeof(IMAGE_NT_HEADERS));
typedef struct _IMAGE_SECTION_HEADER {
0x00 BYTE Name[IMAGE_SIZEOF_SHORT_NAME];//8个字节 一般情况下是以"\0"结尾的ASCII吗字符串来标识的名称,内容可以自定义.注意:该名称并不遵守必须以"\0"结尾的规律,如果不是以"\0"结尾,系统会截取8个字节的长度进行处理.
union {
0x08  DWORD PhysicalAddress;
0x08 DWORD VirtualSize;
} Misc;//双字 是该节在没有对齐前的真实尺寸,该值可以不准确。
0x0c DWORD VirtualAddress;//节区在内存中的偏移地址。加上ImageBase才是在内存中的真正地址.
0x10 DWORD SizeOfRawData; //节在文件中对齐后的尺寸.
0x14 DWORD PointerToRawData; //节区在文件中的偏移.
0x18 DWORD PointerToRelocations;//在obj文件中使用 对exe无意义
0x1c DWORD PointerToLinenumbers;//行号表的位置 调试的时候使用
0x20 WORD NumberOfRelocations;//在obj文件中使用  对exe无意义
0x22 WORD NumberOfLinenumbers;//行号表中行号的数量 调试的时候使用
0x24 DWORD Characteristics;//节的属性
};

PE文件结构简述 简述: PE文件结构分为五个部分: DOS文件头 DOS加载模块 PE文件头 区段表 区段 PE文件中显示的所有地址基本都是RVA,倘若想要换算成VA一般需要加上基地址ImageBase与文件偏移地址RVA。 虚拟地址(VA=virtual address):每个32位PE文件被加载到内存的时候都会被分配4GB的虚拟内存,虚拟地址等于“程序的相对虚拟地址+基地址”。 相对虚拟地址(RVA=relatively virtual address):相对虚拟地址是相比较于文件开头的地 阅读详情

相关推荐

PE——PE结构中数据表

PE结构中的数据包主要作用是用于引导操作系统去怎么操作这个文件,大多是为了程序能顺利运行起来做一些前置准备工作。 PE结构中的数据表由可选文件头中的DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; 字段来指示。 这个字段中有IMAGE_NUMBEROF_DIRECTORY_ENTRIES个下面的结构,IMAGE_NUMBEROF_DIRECTORY_ENTRIES也就是可选文件头中的NumberOfRvaAndSizes。 struct _IMAGE_DAT

优快云-ych 867

PE文件结构图

精彩的艺术 909

深入探索PE文件结构.pdf

PE(Portable Executable)文件格式是微软为了在Windows操作系统上运行可执行程序和动态链接库(DLLs)所采用的一种标准文件格式。它继承自旧有的COFF(Common Object File Format),并在此基础上增加了特定于Windows的扩展。COFF头,也称为标准可移植执行文件头(Standard Portable Executable Header),是PE文件中用来标识文件格式和一些基本属性的元数据部分。它位于文件的最开始处,并且紧随MS-DOS头之后。

weixin_34620658的博客 853

PE文件结构详解精华(从头看下去就能大概了解PE文件结构了)

前言 此博客绝大部分内容来自云课堂武大慕课《软件安全-恶意代码机理与防护》。 内容提纲 PE文件及其表现形式 PE文件格式与恶意软件的关系 PE文件格式总体结构 代码节与数据节 引入函数节:PE文件的引入函数机制 引出函数节:DLL文件的函数引出机制 资源节:文件资源索引、定位与修改 重定位节:镜像地址改变后的地址自动修正 PE文件及其表现形式 可移植的可执行文件(PE,Portable...

雨化于画 1万+

PE文件结构详解--(完整版).pdf

PE文件是portable File Format(可移植文件)的简写,我们比较熟悉的DLL和exe文件都是PE文件。了解PE文件格式有助于加深对操作系统的理解,掌握可执行文件的数据结构机器运行机制,对于逆向破解,加壳等安全方面方面的同学极其重要。接下来我将通过接下来几篇详细介绍PE文件的格式。

PE文件结构详解.pdf

PE(Portable Execute)文件是Windows下可执行文件的总称,常见的有DLL,EXE,OCX,SYS等,事实上,一个文件是否是PE文件与其扩展名无关,PE文件可以是任何扩展名。

PE结构 ---> 1. 什么是PE 什么是PE结构 什么是windows可执行程序结构

Windows PE文件结构解析 PE(Portable Executable)是Windows平台可执行文件的标准格式,包括.exe、.dll等文件类型。PE文件由DOS头、PE签名、COFF头、可选头、节表和实际数据区组成,每个部分都有严格定义的结构。关键结构包括:DOS头中的e_lfanew指向PE签名;COFF头定义文件基本属性;可选头包含入口点、基址等关键信息;节表描述各节区属性。PE文件通过这种层次化结构,使Windows加载器能准确识别代码、数据和所需资源的位置,确保程序正确加载执行。相比Li

盾悟 1万+

PE文件结构格式图pdf

1.PE文件结构       首先说一下什么是PE格式吧,虽然从网上搜一下会有很多定义,就我的理解来说,PE是Microsoft为了让程序在Windows上可移植而做的一种文件格式规定。就拿我们每个人都不陌生的exe程序来说吧,它就是一个PE文件,在我们的印象中,只要是Windows操作系统,都能执行exe程序,这就是Microsoft做的让程序在Windows平台上实现移植的功能,这个移植能力的实现是因为规定了exe程序的格式,Windows在执行exe程序的时候,PE文件加载器会按照约定加载exe程序,所以程序就正常地运行起来了。我这么来说是不是对PE文件不那么抽象了,比如像EXE,DLL,SYS这种格式的文件就是PE格式文件,这些文件都是我们平时见到过或者使用过的。如果大家了解图片格式,比如BMP图片,那这个PE文件格式就更好理解了,都是按照一定的规范生成的,在BMP图片中文件头部信息记录了这个文件的大小、创建日期、宽度和高度等等信息,PE文件也是这样,只不过比BMP文件格式更复杂...

PE文件结构详解

Windows程序的各种界面称为资源,包括加速键(Accelerator)、位图(Bitmap)、光标(Cursor)、对话框(DialogBox)、图标(Icon)、菜单(Menu)、串表(StringTable)、工具栏(Toolbar)和版本信息(VersionInformation)等。执行PE文件前,加载程序在进行重定位的时候,会用PE文件在内存中的实际映像地址减PE文件所要求的映像地址,根据重定位类型的不同将差值添加到相应的地址数据中。...

神棍之路 1万+

PE详细结构图

可执行文件结构即PE文件结构超级详细的大图,包括每一个数据段的内容和作用

PE文件结构详细图pdf

PE文件结构详细图pdf

从PE结构到LoadLibrary

重定位表由许多重定位块串接组成,每个重定位块中存放着4KB大小PE文件内容的重定位信息重定位块开头以IMAGE_BASE_RELOCATION开始。

LH1013886337的博客 1555

Ubuntu技巧-Ubuntu远程访问之SSH反向代理

💡大家好,我是可夫小子,《小白玩转ChatGPT》专栏作者,关注AIGC、互联网和自媒体。要把内网的一台的Ubuntu服务器让外面也能访问,总共有三种可行的方案,前面已经介绍了两种方式,今天就来介绍更健壮稳定的方式——ssh反向代理。大概的框架图如下,今天就从服务器购买到设置,手把手的教程,让你花费100块以内,就拥有一个强大的「云服务器」。

可夫小子的频道 1152

PE结构解析

一. DOS头原来为DOS系统使用,现在只需要记住如下两项。 1、DOC头: WORD e_magic * "MZ标记" 用于判断是否为可执行文件. DWORD e_lfanew; * PE头相对于文件的偏移,用于定位PE文件 如上图所示,DOS头一共40H个字节,即64个字节。 结尾处4个字节指向了标准PE头的位置:D8。在这中间的文字是编译器加入的一些描述信息。这些字.

Hello_MyDream的博客 2万+

稳压电源的隐形战场:动态特性如何影响你的嵌入式系统稳定性

本文深入探讨了稳压电源动态特性对嵌入式系统稳定性的关键影响,分析了HT7533和AMS1117等稳压芯片在输入阶跃响应和负载瞬态响应方面的性能差异。通过实测案例展示了不同场景下的动态特性表现,并提供了针对工业控制、IoT设备和射频系统的选型指南与优化策略,帮助工程师解决电源相关的隐蔽故障。

weixin_29204205的博客 609

ZYNQ出现问题及解决办法汇总(一直更新)

问题目录使用软件及开发板版本一,vitis在build project时卡住。二,Could not find FPGA device on the board for connection 'Local'三,FPGA configuration failed:DONE PIN is not high四,Could not find ARM device on the board for connection 'Local' 使用软件及开发板版本 开发板:MZ7XA-7020 软件:vitis2020.2(

qq_45057368的博客 1万+
上一篇: PE 中NT头 遍历
下一篇: shellCode 公式
__网瘾少年
博客等级 码龄11年 122粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值