当前位置: 首页 > 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.shuangfujiaoyu.com/news/62134.html

相关文章:

  • 对公司网站建设的建议黄山seo推广
  • 自己做电影网站有没有钱赚软文文案案例
  • 网站域名备案授权书免费收录平台
  • 十大直播电商平台重庆seo排名电话
  • 建设部网站内装修标准西安seo网络优化公司
  • 金融网站开发的意义 论文推广公司
  • 上杭网站免费发布信息的平台
  • oa系统网站建设郑州seo外包平台
  • 做外贸一般去什么网站找客户品牌宣传推广策划方案
  • 有新浪的域名怎么做网站seo的工作内容主要包括
  • 购买一个网址多少钱宁波seo推荐
  • 商务网站开发高级seo优化招聘
  • 手机制作网站软件网络推广的方式有哪些?
  • 中山市做网站专业的软文街官网
  • 成都网站软件定制开发seo提高网站排名
  • 仿 手机 网站模板htmlseo课程培训课程
  • 外贸网站建设加推广可以发广告的平台
  • 非凡网站建设app推广是做什么的
  • wordpress php sqlite太原seo排名外包
  • 门户网站开发建设成本明细谷歌搜索优化
  • 免费建立手机网站收录批量查询
  • 杭州知名的网站建设策划app拉新推广一手接单平台
  • python开发手机网站开发关键词优化技巧有哪些
  • 云服务器怎么做多个网站中小企业网络营销现状
  • 做网站包括什么软件网上有免费的网站吗
  • 长春网站外包小学生班级优化大师
  • 网站建设进度控制广州seo排名外包
  • 大型集团网站建设江苏做网站的公司有哪些
  • 深圳做网站哪家便宜google adwords
  • 用什么语言来做网站竞价托管资讯