当前位置: 首页 > article >正文

PE文件结构详解(DOS头/NT头/节表/导入表)使用010 Editor手动解析notepad++.exe的PE结构

一:DOS部分

DOS部分分为DOS MZ文件头和DOS块,其中DOS MZ头实际是一个64位的IMAGE_DOS——HEADER结构体。

DOS MZ头部结构体的内容如下,我们所需要关注的是前面两个字节(e_magic)和后面四个字节(e_lfanew)

typedef struct _IMAGE_DOS_HEADER
{WORD   e_magic;       // DOS头的标识  "MZ"  4Dh  5Ah(2个字节)      #define IMAGE_DOS_SIGNATURE  0x5A4DWORD   e_cblp;        // 文件最后一页中的字节数WORD   e_cp;          // 文件中的全部页数WORD   e_crlc;        // 重定位表中的指针数WORD   e_cparhdr;     // 头部尺寸,以段落为单位WORD   e_minalloc;    // 所需的最小附加段  WORD   e_maxalloc;    // 所需的最大附加段  WORD   e_ss;          // 初始的SS值(相对偏移量)WORD   e_sp;          // 初始的SP值WORD   e_csum;        // 补码校验值WORD   e_ip;          // 初始的IP值   WORD   e_cs;          // 初始的CS值WORD   e_lfarlc;      // 重定位表的字节偏移量 WORD   e_ovno;        // 覆盖号WORD   e_res[4];      // 保留字WORD   e_oemid;       // OEM 标识符(相对e_oeminfo) WORD   e_oeminfo;     // OEM 信息WORD   e_res2[10];    // 保留字// DosHeader + 0x3C 正好定位到e_lfanewLONG    e_lfanew;     // NT头相对于文件起始地址的偏移, 4字节, 指示NT头的位置
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

二、PE文件头

PE文件头可以分为三个部分,分别为PE标识、标准PE头、扩展PE头,结构体内容如下所示

typedef struct _IMAGE_NT_HEADERS {DWORD Signature; ``// PE标识--4字节IMAGE_FILE_HEADER FileHeader; ``// 标准PE头--20字节IMAGE_OPTIONAL_HEADER32 OptionalHeader; ``// 扩展PE头--224字节/240字节
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;

现在我们详细解释一下标准PE头,标准PE头的结构体如下:

typedef struct _IMAGE_FILE_HEADER
{WORD Machine;                //PE文件运行的平台,值为IMAGE_FILE_MACHINE_I386(0x14c)表示是x86处理器,//IMAGE_FILE_MACHINE_AMD64(0x8664)或IMAGE_FILE_MACHINE_IA64(0x200)表示是x64处理器。WORD NumberOfSections;       //文件中存在的节的个数,如果想在PE文件中增加或删除节,必须变更此处的值DWORD TimeDateStamp;         //创建此文件时的时间戳DWORD PointerToSymbolTable;  //COFF符号表的文件偏移,对于映像文件来说,此值为0DWORD NumberOfSymbols;       //符号表中元素的数目,对于映像文件来说,此值为0WORD SizeOfOptionalHeader;   //可选头的大小,32位下默认为00E0h,64位下默认为00F0hWORD Characteristics;        //文件属性标志,exe一般是010fh,dll一般是210eh
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;

现在我们得到:

那什么是PE文件属性呢,现在我们知道PE文件属性的十六进制值是00 22(倒序读取),那么可以得到二进制是0001 0110

对应下面的表,也就是第1位、第二位和第四位对应数字为1得到的属性值

对于扩展PE头,大小有标准PE头的SizeOfOptionalHeader决定,就是00F0

三、节表

每个节表的固定大小是40字节,节表不止一个,可能有多个,节表的数量是标准PE头中的NumberOfSections属性决定的,虽然节表有多个,但是每个节表中的结构是相同的。

根据上面的标准头解析,可以看到是六个节表(00 06),每个节表大小是40字节,一共是240字节,如下图

每个节表的最后四个字节是属性,这里是60 00 00 20,可以得到二进制是0110 0000 0000 0000 0000 0000 0010 0000

那么就可以得到:

利用工具打开,可以发现是六个节表

以下是节表的基本结构

typedef struct _IMAGE_SECTION_HEADER {
0x00 BYTE Name[IMAGE_SIZEOF_SHORT_NAME];     //00 00 00 74 78 65 74 2E 8字节,节表的名字,一般情况下"\0"来结束,内容可以自己定义
union {  0x08 DWORD PhysicalAddress; 0x08 DWORD VirtualSize;                    
} Misc;                                      //00 01 80 6C   双字,是该节在没有对齐前的真是尺寸,内容可以不准确
0x0c DWORD VirtualAddress;                   //00 00 10 00   节区在内存中的偏移地址
0x10 DWORD SizeOfRawData;                    //00 01 82 00   节在文件中对齐后的尺寸
0x14 DWORD PointerToRawData;                 //00 00 04 00   节区在文件中的偏移
0x18 DWORD PointerToRelocations;             //00 00 00 00   在exe文件中无意义
0x1c DWORD PointerToLinenumbers;             //00 00 00 00   在exe文件中无意义
0x20 WORD NumberOfRelocations;               //00 00         在exe文件中无意义
0x22 WORD NumberOfLinenumbers;               //00 00         该节在行号表中的行号数
0x24 DWORD Characteristics;                  //60 00 00 20   节的属性
};

 四、节数据

查看区段:

我们需要的是节区在文件中的偏移,就是在20字节之后的00000400,节区的大小是在16字节之后的,也就是0046FE00

 也就是00000400之后的数据:

以上就是最基本的PE文件结构了。

相关文章:

PE文件结构详解(DOS头/NT头/节表/导入表)使用010 Editor手动解析notepad++.exe的PE结构

一:DOS部分 DOS部分分为DOS MZ文件头和DOS块,其中DOS MZ头实际是一个64位的IMAGE_DOS——HEADER结构体。 DOS MZ头部结构体的内容如下,我们所需要关注的是前面两个字节(e_magic)和后面四个字节(e_lfanew&a…...

[含文档+PPT+源码等]精品基于Python实现的vue3+Django计算机课程资源平台

基于Python实现的Vue3Django计算机课程资源平台的背景,可以从以下几个方面进行阐述: 一、教育行业发展背景 1. 教育资源数字化趋势 随着信息技术的快速发展,教育资源的数字化已成为不可逆转的趋势。计算机课程资源作为教育领域的重要组成部…...

vue3中ref和reactive响应式数据、ref模板引用(组合式和选项式区别)、组件ref的使用

目录 Ⅰ.ref 1.基本用法:ref响应式数据 2.ref模板引用 3.ref在v-for中的模板引用 ​4.ref在组件上使用 ​5.TS中ref数据标注类型 Ⅱ.reactive 1.基本用法:reactive响应式数据 2.TS中reactive标注类型 Ⅲ.ref和reactive的使用场景和区别 Ⅳ.小结…...

Oracle VM VirtualBox 7.1 安装与虚拟机创建全流程指南(Windows平台)

一、软件定位与核心功能 Oracle VM VirtualBox 是开源跨平台虚拟化工具,支持在 Windows、Linux、macOS 系统上创建和管理虚拟机(VM),其核心功能包括: 多系统兼容:可安装 Windows、Ubuntu、CentOS 等 50 操…...

细说 Java GC 垃圾收集器

一、GC目标 业务角度,我们需要追求2个指标: 低延迟(Latency):请求必须多少毫秒内完成响应;高吞吐(Throughput):每秒完成多少次事务。 两者通常存在权衡关系&#xff0…...

云原生网络篇——万级节点服务网格与智能流量治理

引言:网络即神经系统 2023年双十一期间,某电商平台的支付网关因瞬时流量激增导致服务网格控制面崩溃,造成2.7亿元交易失败。而另一家跨国流媒体公司通过智能流量治理系统,在跨三大洲的云环境中实现了200万QPS的稳定传输。这两个案…...

请解释 React 中的 Hooks,何时使用 Hooks 更合适?

一、Hooks 核心理解 1. 什么是 Hooks? Hooks 是 React 16.8 引入的函数式编程范式,允许在函数组件中使用状态管理和生命周期能力。就像给函数组件装上了"智能芯片",让原本只能做简单展示的组件具备了处理复杂逻辑的能力。 2. 类…...

《国密算法开发实战:从合规落地到性能优化》

前言 随着信息技术的飞速发展,信息安全已成为全球关注的焦点。在数字化时代,数据的保密性、完整性和可用性直接关系到国家、企业和个人的利益。为了保障信息安全,密码技术作为核心支撑,发挥着至关重要的作用。国密算法,即国家密码算法,是我国自主设计和推广的一系列密码…...

第2章 windows故障排除(网络安全防御实战--蓝军武器库)

网络安全防御实战--蓝军武器库是2020年出版的,已经过去3年时间了,最近利用闲暇时间,抓紧吸收,总的来说,第2章开始带你入门了,这里给出了几个windows重要的工具,说实话,好多我也是第一…...

DifyでOracle Base Database Service(23ai)を利用する設定手順

[TOC](DifyでOracle Base Database Service(23ai)を利用する設定手順) はじめに 本記事では、DifyプラットフォームとOracle Base Database Service(23aiエディション)を連携させる方法を解説します。クラウド環境における大規模データ処理を想定した設…...

量子关联特性的多维度探索:五量子比特星型系统与两量子比特系统的对比分析

模拟一个五量子比特系统,其中四个量子比特(编号为1, 2, 3, 4)分别与第五个量子比特(编号为5)耦合,形成一个星型结构。分析量子比特1和2的纠缠熵随时间的变化。 系统的哈密顿量H描述了量子比特间的相互作用…...

初识C语言之操作符详解(上)

一.操作符分类 1.算数操作符&#xff1a; - * / % 2.移位操作符&#xff1a;<< >> 3.位操作符&#xff1a;& | ʌ 4.赋值操作符&#xff1a; - * / % << >> & | ʌ 5.单目操作符&#xff1…...

HarmonyOS学习第12天:解锁表格布局的奥秘

表格布局初相识 不知不觉&#xff0c;我们在 HarmonyOS 的学习旅程中已经走到了第 12 天。在之前的学习里&#xff0c;我们逐步掌握了 HarmonyOS 开发的各种基础与核心技能&#xff0c;比如组件的基本使用、布局的初步搭建等&#xff0c;这些知识就像一块块基石&#xff0c;为我…...

【心得】一文梳理高频面试题 HTTP 1.0/HTTP 1.1/HTTP 2.0/HTTP 3.0的区别并附加记忆方法

面试时很容易遇到的一个问题—— HTTP 1.0/HTTP 1.1/HTTP 2.0/HTTP 3.0的区别&#xff0c;其实这四个版本的发展实际上是一环扣一环的&#xff0c;是逐步完善的&#xff0c;本文希望帮助读者梳理清楚各个版本之间的区别&#xff0c;并且给出当前各个版本的应用情况&#xff0c;…...

《Python实战进阶》No 11:微服务架构设计与 Python 实现

第11集&#xff1a;微服务架构设计与 Python 实现 2025年3月3日更新了代码和微服务运行后的系统返回信息截图&#xff0c;所有代码在 python3.11.5虚拟环境下运行通过。 微服务架构通过将复杂应用拆分为独立部署的小型服务&#xff0c;显著提升了系统的可扩展性和维护性。本集…...

电商平台项目需求文档(精简版)

以下是电商平台项目需求文档样例&#xff08;精简版&#xff09;&#xff0c;包含核心功能模块和技术实现要求&#xff1a; 电商平台项目需求文档 一、项目概述 项目名称&#xff1a;ECP-全栈电商平台&#xff08;ECP - E-Commerce Platform&#xff09; 技术定位&#xff1a…...

Android15 Camera HAL Android.bp中引用Android.mk编译的libB.so

背景描述 Android15 Camera HAL使用Android.bp脚本来构建系统。假设Camera HAL中引用了另外一个HAL实现的so &#xff08;例如VPU HAL&#xff09;&#xff0c; 恰巧被引用的这个VPU HAL so是用Android.mk构建的&#xff0c;那Camera HAL Android.bp在直接引用这个Android.mk编…...

P8720 [蓝桥杯 2020 省 B2] 平面切分--set、pair

P8720 [蓝桥杯 2020 省 B2] 平面切分--set、pair 题目 分析一、pair1.1pair与vector的区别1.2 两者使用场景两者组合使用 二、set2.1核心特点2.2set的基本操作2.3 set vs unordered_set示例&#xff1a;统计唯一单词数代码 题目 分析 大佬写的很明白&#xff0c;看这儿 我讲讲…...

postgresql源码学习(60)—— VFD的作用及机制

首先VFD是Virtual File Descriptor&#xff0c;即虚拟文件描述符&#xff0c;既然是虚拟的&#xff0c;一定先有物理的。 一、 物理文件描述符&#xff08;File Descriptor, FD&#xff09; 1. 什么是 FD 它是操作系统提供给用户程序访问和操作文件或其他 I/O 资源的抽象接口…...

【CSS—前端快速入门】CSS 选择器

CSS 1. CSS介绍 1.1 什么是CSS? CSS(Cascading Style Sheet)&#xff0c;层叠样式表&#xff0c;用于控制页面的样式&#xff1b; CSS 能够对网页中元素位置的排版进行像素级精确控制&#xff0c;实现美化页面的效果&#xff1b;能够做到页面的样式和 结构分离&#xff1b; 1…...

Linux安装jdk,node,mysql,redis

准备工作&#xff1a; 1.安装VMware软件&#xff0c;下载CentOs7镜像文件&#xff0c;在VMware安装CentOs7 2.宿主机安装Xshell用来操作linux 3. .宿主机安装Xftp用来在宿主机和虚拟机的linux传输文件 案例1&#xff1a;在 /home/soft文件夹解压缩jdk17&#xff0c;并配置环…...

深度求索(DeepSeek)的AI革命:NLP、CV与智能应用的技术跃迁

Deepseek官网&#xff1a;DeepSeek 引言&#xff1a;AI技术浪潮中的深度求索 近年来&#xff0c;人工智能技术以指数级速度重塑全球产业格局。在这场技术革命中&#xff0c;深度求索&#xff08;DeepSeek&#xff09;凭借其前沿的算法研究、高效的工程化能力以及对垂直场景的…...

Minio搭建并在SpringBoot中使用完成用户头像的上传

Minio使用搭建并上传用户头像到服务器操作,学习笔记 Minio介绍 minio官网 MinIO是一个开源的分布式对象存储服务器&#xff0c;支持S3协议并且可以在多节点上实现数据的高可用和容错。它采用Go语言开发&#xff0c;拥有轻量级、高性能、易部署等特点&#xff0c;并且可以自由…...

【鸿蒙Next】 测试包 签名、打包、安装 整体过程记录

签名打包记录&#xff1a; HarmonyOS应用签名、打Hap包、Hap调试包真机安装步骤 https://blog.csdn.net/qq_34462735/article/details/135226332 测试包真机安装方式二 DevEco Testing 鸿蒙应用示例&#xff1a;DevEco Testing 工具的常用功能及使用场景 https://blog.csd…...

阿里云 | 快速在网站上增加一个AI助手

创建智能体应用 如上所示&#xff0c;登录阿里云百炼人工智能业务控制台&#xff0c;创建智能体应用&#xff0c;智能体应用是一个agent&#xff0c;即提供个人或者企业的代理或中间件组件应用&#xff0c;对接阿里云大模型公共平台&#xff0c;为个人或者企业用户提供大模型应…...

Raspberry Pi边缘计算网关设计与LoRa通信实现

Raspberry Pi边缘计算网关设计与LoRa通信实现 摘要第一章 绪论1.1 研究背景1.2 研究现状1.3 论文结构 第二章 相关技术理论2.1 边缘计算体系架构2.2 LoRa通信技术2.3 Raspberry Pi硬件生态 第三章 系统架构设计3.1 硬件架构设计3.2 软件架构设计3.3 混合通信协议设计 第四章 硬…...

原型链与继承

#搞懂还是得自己动手# 原型链 function Person(name) { this.name name; } Person.prototype.sayName function() { console.log(this.name); };const p new Person("Alice"); 原型链关系图&#xff1a; 原型链&#xff1a;person->Person.prototype->O…...

动态规划 ─── 算法5

动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09;是一种用于解决复杂问题的算法设计技术&#xff0c;特别适用于具有重叠子问题和最优子结构性质的问题。动态规划通过将问题分解为更小的子问题&#xff0c;并存储子问题的解来避免重复计算&#xff0c;…...

博客系统--测试报告

博客系统--测试报告 项目背景项目功能功能测试①登录功能测试②发布博客功能测试③删除文章功能测试④功能测试总结&#xff1a; 自动化测试自动化脚本执行界面&#xff1a; 性能测试 本博文主要针对个人实现的项目《博客系统》去进行功能测试、自动化测试、性能测试&#xff0…...

【博资考4】网安学院-硕转博考试内容

【博资考4】硕转博考试内容 - 网络安全与基础理论 写在最前面一. **21年硕转博面试内容回顾**网络、逆向、操作系统、攻防、漏洞1. **网络安全常见攻击方式及其防范措施**1.1 **DDoS攻击&#xff08;分布式拒绝服务&#xff09;**1.2 **SQL注入攻击**1.3 **XSS攻击&#xff08;…...