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

pe格式从入门到图形化显示(四)-节表


文章目录

  • 前言
  • 一、什么是Windows PE格式节表?
  • 二、解析节表并显示
    • 1.节表数据结构以及字段描述
    • 2.节表的属性
    • 3.解析
    • 4.显示


前言

通过分析和解析Windows PE格式,并使用qt进行图形化显示


一、什么是Windows PE格式节表?

PE格式的节表(Section Table)是一个数组,它包含了PE文件中各个节(Section)的信息。每个节表项都是一个IMAGE_SECTION_HEADER结构体,它包含了关于节的名称、大小、属性等信息。

二、解析节表并显示

1.节表数据结构以及字段描述

Name:节的名称,最多8个字符,以空字符填充。
VirtualSize:节在内存中的大小,以字节为单位。
VirtualAddress:节在内存中的起始RVA(相对虚拟地址)。
SizeOfRawData:节在文件中的大小,以字节为单位。
PointerToRawData:节在文件中的起始偏移量,以字节为单位。
PointerToRelocations:节的重定位表在文件中的起始偏移量,以字节为单位。
PointerToLinenumbers:节的行号表在文件中的起始偏移量,以字节为单位。
NumberOfRelocations:节的重定位表中的项数。
NumberOfLinenumbers:节的行号表中的项数。
Characteristics:节的属性,如可读、可写、可执行等。

struct IMAGE_SECTION_HEADER
{BYTE Name[IMAGE_SIZEOF_SHORT_NAME];union {DWORD PhysicalAddress;DWORD VirtualSize;} Misc;DWORD VirtualAddress;DWORD SizeOfRawData;DWORD PointerToRawData;DWORD PointerToRelocations;DWORD PointerToLinenumbers;WORD NumberOfRelocations;WORD NumberOfLinenumbers;DWORD Characteristics;
};

2.节表的属性

PE格式的节表中的每个节都有一个属性字段(Characteristics),它是一个位掩码,用于指定节的各种属性。以下是一些常见的节属性及其具体值:
IMAGE_SCN_CNT_CODE:表示节包含可执行代码。具体值为0x00000020。
IMAGE_SCN_CNT_INITIALIZED_DATA:表示节包含初始化的数据。具体值为0x00000040。
IMAGE_SCN_CNT_UNINITIALIZED_DATA:表示节包含未初始化的数据。具体值为0x00000080。
IMAGE_SCN_MEM_EXECUTE:表示节可以执行。具体值为0x20000000。
IMAGE_SCN_MEM_READ:表示节可以读取。具体值为0x40000000。
IMAGE_SCN_MEM_WRITE:表示节可以写入。具体值为0x80000000。
IMAGE_SCN_MEM_SHARED:表示节可以在多个进程之间共享。具体值为0x10000000。
IMAGE_SCN_MEM_DISCARDABLE:表示节可以被丢弃,以释放内存。具体值为0x02000000。
IMAGE_SCN_MEM_NOT_CACHED:表示节不应被缓存。具体值为0x04000000。
IMAGE_SCN_MEM_NOT_PAGED:表示节不应被分页。具体值为0x08000000。
这些属性可以组合使用,以指定节的具体属性。例如,如果一个节同时包含可执行代码和可读数据,那么它的属性字段将包含IMAGE_SCN_CNT_CODE和IMAGE_SCN_MEM_READ标志。在处理PE文件时,可以通过检查节的属性字段来确定节的具体用途和行为。

3.解析

bool PEParser::parserFileData(const QByteArray &fileData)
{//判断是否是MZ开头的文件if (fileData.left(2) != "MZ"){return false;}//解析DOS头parserDOSHeader(fileData.left(sizeof(IMAGE_DOS_HEADER)));//DOSStub数据m_dosStubData = fileData.mid(sizeof(IMAGE_DOS_HEADER), m_dosHeader.e_lfanew - sizeof(IMAGE_DOS_HEADER));long peAddress = m_dosHeader.e_lfanew;if (fileData.mid(peAddress, 2) != "PE"){return false;}m_fileData = fileData;//去除前4个字节的PE头标识long fileHeaderIndex = peAddress + 4;//记录文件头索引m_fileHeaderIndex = fileHeaderIndex;//解析标准PE文件头paserFileHeader(fileData.mid(fileHeaderIndex, sizeof(IMAGE_FILE_HEADER)));//解析扩展PE文件头long optionHeaderIndex = fileHeaderIndex + sizeof(IMAGE_FILE_HEADER);//记录扩展PE文件头索引m_optionHeaderIndex = optionHeaderIndex;//解析扩展PE文件头parserOptionHeader(fileData.mid(optionHeaderIndex, m_fileHeader.SizeOfOptionalHeader));//解析节表long sectionHeaderIndex = optionHeaderIndex + m_fileHeader.SizeOfOptionalHeader;//节表结构在文件中开始的偏移m_sectionHeaderIndex = sectionHeaderIndex;//解析节表parserSectionHeader(fileData.mid(sectionHeaderIndex,m_fileHeader.NumberOfSections * sizeof(IMAGE_SECTION_HEADER)));return true;
}void PEParser::parserSectionHeader(const QByteArray &sectionHeader)
{m_sections.clear();for (int i = 0; i < m_fileHeader.NumberOfSections; ++i){int index = i * sizeof(IMAGE_SECTION_HEADER);QByteArray sectionData = sectionHeader.mid(index, sizeof(IMAGE_SECTION_HEADER));const IMAGE_SECTION_HEADER *header = reinterpret_cast<const IMAGE_SECTION_HEADER *>(sectionData.data());m_sections.append(*header);}emit sendSectionHeader(m_sections);
}

4.显示

void MainWindow::showSectionHeader(const QList<IMAGE_SECTION_HEADER> &sections)
{ui->tableWidget_sections->clearContents();ui->tableWidget_dataDirectories->setRowCount(0);for (int i = 0; i < sections.size(); ++i){ui->tableWidget_sections->insertRow(i);ui->tableWidget_sections->setItem(i, 0, new QTableWidgetItem(QString::asprintf("%s", sections[i].Name)));ui->tableWidget_sections->setItem(i, 1, new QTableWidgetItem(QString::asprintf("%08lX", sections[i].VirtualAddress)));ui->tableWidget_sections->setItem(i, 2, new QTableWidgetItem(QString::asprintf("%08lX", sections[i].Misc.VirtualSize)));ui->tableWidget_sections->setItem(i, 3, new QTableWidgetItem(QString::asprintf("%08lX", sections[i].PointerToRawData)));ui->tableWidget_sections->setItem(i, 4, new QTableWidgetItem(QString::asprintf("%08lX", sections[i].SizeOfRawData)));ui->tableWidget_sections->setItem(i, 5, new QTableWidgetItem(QString::asprintf("%08lX", sections[i].Characteristics)));}
}

相关文章:

pe格式从入门到图形化显示(四)-节表

文章目录 前言一、什么是Windows PE格式节表&#xff1f;二、解析节表并显示1.节表数据结构以及字段描述2.节表的属性3.解析4.显示 前言 通过分析和解析Windows PE格式&#xff0c;并使用qt进行图形化显示 一、什么是Windows PE格式节表&#xff1f; PE格式的节表&#xff08…...

路由策略与路由控制之双点双向重发布(OSPF-ISIS)实验

双点双向重发布在路由协议中&#xff0c;特别是在OSPF&#xff08;开放式最短路径优先&#xff09;与IS-IS&#xff08;中间系统到中间系统&#xff09;等协议之间&#xff0c;指的是在两个协议间或者两个进程间进行路由信息共享的机制。这种机制涉及到在两个不同的协议区域使用…...

9proxy—数据采集工具全面测评

9Proxy数据采集工具Unlock the web with 9Proxy, the top residential proxy provider. Get unlimited bandwidth, affordable prices, and secure HTTPS and Socks5 configurations.https://9proxy.com/?utm_sourceblog&utm_mediumcsdn&utm_campaignyan 前言 在当今数…...

上海晶珩树莓派工业智能机械臂,亮相2024年embedded world博览会!

上海晶珩树莓派工业智能机械臂&#xff0c;亮相2024年embedded world博览会&#xff01; 工业智能机械臂是上海晶珩&#xff08;EDATEC&#xff09;团队基于树莓派工业相机ED-AIC2000和树莓派工业触摸屏ED-HMI2320开发的创新应用案例。 工业智能机械臂具备卓越的定位能力&…...

蓝桥杯——求和

题目 给定 n 个整数 a1, a2&#xff0c;…,an&#xff0c;求它们两两相乘再相加的和即: Sa1a2a1a3a1ana2a3 a&#xff08;n-2&#xff09;*an...a(n-1)*an 输入格式 输入的第一行包含一个整数 n。 第二行包含 几 个整数 a1,a2,,an。 输出格式 输出一个整数 S&#xff0c;表示所…...

设计模式:责任链模式示例

责任链模式可以应用于多种场景&#xff0c;下面是几个不同场景的例子&#xff0c;每个例子都包括完整的代码。 示例1&#xff1a;日志处理系统 在日志处理系统中&#xff0c;日志消息可以根据其严重性&#xff08;错误、警告、信息&#xff09;被不同级别的日志处理器处理。 …...

SpringBoot快速入门笔记(4)

文章目录 一、Vue框架1、前端环境准备2、简介3、快速开始4、事件绑定 二、Vue组件化开发1、NPM2、Vue Cli3、组件化开发4、SayHello自定义组件5、Movie自定义组件 一、Vue框架 1、前端环境准备 编码工具&#xff1a;VSCode 依赖管理&#xff1a;NPM 项目构建&#xff1a;VueCl…...

GoPro相机使用的文件格式和频率

打开GoPro相机(以11为例)&#xff0c;里面是一个DCIM文件夹。 DCIM是digital camera in memory 的简写&#xff0c;即存照片的文件夹&#xff0c;常见于数码相机、手机存储卡中的文件夹名字。 正常手机拍照和视频都是保存在此文件夹的。正常建议不用删&#xff0c;因为只要拍照…...

Redis Stack 安装部署

参考&#xff1a;Run Redis Stack on Docker | Redis Redis-stack 初体验_redis stack-CSDN博客 【docker】运行redis_docker run redis-stack-server requirepass-CSDN博客 Redis Stack 是一组软件套件&#xff0c;它主要由三部分组成。 一个是 Redis Stack Server&#x…...

【经典算法】LeetCode 5: 最长回文子串(Java/C/Python3实现含注释说明,Medium)

目录 题目描述思路及实现方式一&#xff1a;动态规划法思路代码实现Java版本C语言版本Python3版本 复杂度分析 方式二&#xff1a;中心扩展法思路代码实现Java版本C语言版本Python3版本 复杂度分析 总结相似题目 标签(题目类型)&#xff1a;回文串、动态规划 题目描述 给定一…...

39.Python从入门到精通—parseString 方法 Python 解析XML实例 使用xml.dom解析xml

39.Python从入门到精通—parseString 方法 Python 解析XML实例 使用xml.dom解析xml parseString 方法Python 解析XML实例使用xml.dom解析xml parseString 方法 parseString 方法是 Python 标准库中 xml.dom.minidom 模块中的一个函数&#xff0c;用于解析 XML 字符串并构建 DO…...

【蓝桥杯第九场小白赛】(部分)

最近写的零零散散的&#xff0c;感觉这两天遇到的题对于短时间提升意义已经不大了&#xff0c;还是做简单题保持手感吧哎 盖印章 #include <iostream> using namespace std; using LLlong long; int main() {ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);LL n,m…...

【Linux】Supervisor 基础

要在Linux上启动Supervisor&#xff0c;你可以按照以下步骤进行操作&#xff1a; 确保你已经安装了Supervisor。使用适合你的Linux发行版的包管理器进行安装。例如&#xff0c;对于Ubuntu&#xff0c;可以运行以下命令安装Supervisor&#xff1a; sudo apt-get update sudo apt…...

48 全连接卷积神经网络 FCN【动手学深度学习v2】

全连接卷积神经网络&#xff1a;神经网络处理语义分割问题的奠基性工作&#xff0c;目前已不太常用。 了解一下全卷积网络模型最基本的设计。 如 下图所示&#xff0c;全卷积网络先使用卷积神经网络抽取图像特征&#xff0c;然后通过11卷积层将通道数变换为类别个数&#xff0…...

pytorch中的nn.MSELoss()均方误差损失函数

一、nn.MSELoss()是PyTorch中的一个损失函数&#xff0c;用于计算均方误差损失。 均方误差损失函数通常用于回归问题中&#xff0c;它的作用是计算目标值和模型预测值之间的平方差的平均值。 具体来说&#xff0c;nn.MSELoss()函数的输入是两个张量&#xff0c;即模型的真实值…...

三国游戏(贪心 排序)

三国游戏 利用贪心、排序、前缀和的计算方法&#xff0c;特别注意不要数据溢出了&#xff0c;sum 加long long s[i] x[i]-y[i]-z[i]输入: 3 1 2 2 2 3 2 1 0 7输出: 2#include <bits/stdc.h> using namespace std;const int N 1e5100;typedef long long ll;bool cm…...

GPU环境安装与虚拟环境安装(适用于Windows下的李沐GPU)

之前我是用的都是VMware的虚拟机且安装的是cpu的pytorch版本,因为想要使用GPU,最终实现了在Windows上使用GPU,并且相关原理也在参考文章或视频内,可以通过原理自行挑选自己所需的配置并安装。 文章目录 1.GPU安装1.1 名词解释1.2 卸载旧版本的CUDA1.3 版本选择步骤(Nivida显卡…...

Http Download

Http / Https 下载文件&#xff0c;startWith不能验证https&#xff0c;测试地址&#xff1a;https://storage.googleapis.com/golang/go1.7.3.windows-amd64.msi private static final Logger logger Logger.getLogger(MethodHandles.lookup().lookupClass());private static…...

【Android】Glide加载SVG,SVG转PNG

Dependency plugins {id kotlin-kapt }dependencies {api com.github.bumptech.glide:glide:4.12.0kapt com.github.bumptech.glide:compiler:4.12.0api com.caverock:androidsvg:1.4 }SvgDecoder 负责解码SVG资源 import com.bumptech.glide.load.Options import com.bumpte…...

Spring、SpringMVC、Springboot三者的区别和联系

1.背景 最近有人问面试的一个问题&#xff1a;Spring、SpringMVC、Springboot三者的区别和联系&#xff0c;个人觉得&#xff1a;万变不离其宗&#xff0c;只需要理解其原理&#xff0c;回答问题信手拈来。 2.三者区别和联系 2.1 先了解Spring基础 Spring 框架就像一个家族…...

YOLO12模型与GitHub Actions结合:自动化测试与部署流水线

YOLO12模型与GitHub Actions结合&#xff1a;自动化测试与部署流水线 1. 引言 在目标检测项目的开发过程中&#xff0c;我们经常面临这样的挑战&#xff1a;每次修改代码后都需要手动运行测试、构建镜像、部署模型&#xff0c;这个过程既耗时又容易出错。特别是对于YOLO12这样…...

springboot+vue基于web的高校学生宿舍报修系统

目录同行可拿货,招校园代理 ,本人源头供货商高校学生宿舍报修系统功能分析&#xff08;SpringBootVue&#xff09;系统角色划分核心功能模块学生端功能维修端功能管理端功能系统管理功能技术实现要点扩展功能建议数据安全考虑项目技术支持源码获取详细视频演示 &#xff1a;文章…...

颠覆级植物大战僵尸修改工具:一站式资源管理与战局掌控解决方案

颠覆级植物大战僵尸修改工具&#xff1a;一站式资源管理与战局掌控解决方案 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 还在为植物大战僵尸中阳光不足而焦虑吗&#xff1f;面对海量僵尸浪潮却束…...

如何用Mermaid Live Editor 5分钟创建专业图表

如何用Mermaid Live Editor 5分钟创建专业图表 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-editor Mermaid Live…...

Phi-4-mini-reasoning实际作品:15个跨学科逻辑题(数学/哲学/计算机)解答集

Phi-4-mini-reasoning实际作品&#xff1a;15个跨学科逻辑题&#xff08;数学/哲学/计算机&#xff09;解答集 1. 模型能力概览 Phi-4-mini-reasoning是一个专注于推理任务的文本生成模型&#xff0c;特别擅长处理需要多步逻辑推导的问题。与通用聊天模型不同&#xff0c;它被…...

高效实时换脸架构优化:Deep-Live-Cam技术实现与部署方案

高效实时换脸架构优化&#xff1a;Deep-Live-Cam技术实现与部署方案 【免费下载链接】Deep-Live-Cam real time face swap and one-click video deepfake with only a single image 项目地址: https://gitcode.com/GitHub_Trending/de/Deep-Live-Cam Deep-Live-Cam是一款…...

终极指南:免费开源fSpy相机匹配工具,3分钟实现2D图像到3D场景的完美转换

终极指南&#xff1a;免费开源fSpy相机匹配工具&#xff0c;3分钟实现2D图像到3D场景的完美转换 【免费下载链接】fSpy A cross platform app for quick and easy still image camera matching 项目地址: https://gitcode.com/gh_mirrors/fs/fSpy 还在为将2D照片转换为精…...

BGE Reranker-v2-m3在VSCode插件开发中的应用

BGE Reranker-v2-m3在VSCode插件开发中的应用 1. 引言 作为一名长期使用VSCode进行开发的程序员&#xff0c;我经常遇到这样的困扰&#xff1a;在庞大的代码库中搜索特定功能或文档时&#xff0c;传统的文本搜索往往返回大量不相关的结果&#xff0c;需要花费大量时间手动筛选…...

厂房钢结构工程:从设计、制造到安装验收的关键要点全解析

一、什么是厂房钢结构工程&#xff0c;为什么越来越常见&#xff1f;厂房钢结构工程&#xff0c;简单说&#xff0c;就是以钢柱、钢梁、檩条、支撑体系、屋面系统和围护系统为主体&#xff0c;完成工业厂房、仓储车间、物流中心、生产车间及配套功能区建设的一类工程。相比传统…...

M2LOrder模型Typora写作辅助插件开发:实时监测文章情感基调

M2LOrder模型Typora写作辅助插件开发&#xff1a;实时监测文章情感基调 不知道你有没有过这样的经历&#xff1a;写了一篇技术文章&#xff0c;自己读起来总觉得哪里不对劲&#xff0c;但又说不出来具体问题。或者写产品文案时&#xff0c;明明想表达积极向上的情绪&#xff0…...