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

做网站宁波大点的网络公司外贸建站

做网站宁波大点的网络公司,外贸建站,深圳网站优化平台,佛山网站建设多少钱文章目录 前言一、什么是Windows PE格式节表?二、解析节表并显示1.节表数据结构以及字段描述2.节表的属性3.解析4.显示 前言 通过分析和解析Windows PE格式,并使用qt进行图形化显示 一、什么是Windows PE格式节表? PE格式的节表&#xff08…

文章目录

  • 前言
  • 一、什么是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)));}
}

http://www.yayakq.cn/news/390009/

相关文章:

  • 网站备案好麻烦太原app制作公司
  • 总公司网站备案后 分公司网站还需要备案吗大良商城网站建设
  • 个人做外贸的网站有哪些山东网站建设口碑好
  • 邵阳网站开发公司推荐关于网站建设案例
  • 深圳营销型网站方案wordpress导入img文件方法
  • 找工程做在哪个网站?天津黑曼巴网站建设
  • 展览中心网站建设wordpress 如何分页
  • 网站建设网页设计公司科技发明
  • 网站怎么样做采集别人网站的文章管理手机网站首页
  • 锦州电脑网站建设wordpress客户端制作
  • 网站建设后期维护流程wordpress 运行好慢
  • 在线网页代理浏览免费通辽做网站0475seo
  • 如何查看网站流量wordpress 点评插件
  • 如何做网站条幅闪图承德手机网站建设
  • 中建招聘网站大庆市城乡建设局网站首页
  • 网站建设质量管理定义网站的制作与调试
  • 珠海做网站优化网站开发人员需要什么技能
  • wordpress 直播 视频宁波网站优化公司电话
  • 网站怎么做运营推广广东省建设工程执业中心网站
  • 太原推广型网站建设轻松学做网站
  • 乐山住房和城乡建设厅网站服装网站推广策划书
  • 做网站用属于前端网站开发有哪些架构
  • 石家庄网站建设培训学校佛山网站建设锐艺传播
  • 奥远网站建设流程WordPress建站步骤
  • 怎么在网站做支付端口对接自助式网站制作
  • 网站怎样制作吸引人建设工业
  • 做电商网站都需要学什么网站建设服务专业
  • 做网站招标电子商务网站html模板
  • 网站建设网页制作软件深圳自助网站建设
  • 交换机可以做网站跳转吗在线制作电子公章生成器