引导型网站设计个人主题网站做的步骤

news/2025/9/22 17:19:44/文章来源:
引导型网站设计,个人主题网站做的步骤,荆州哪个公司做网站,多少钱一个文章目录 前言一、什么是Windows PE格式中的导入表#xff1f;二、解析导入表并显示1.导入表的结构2.解析导入表3.显示导入表 前言 通过分析和解析Windows PE格式#xff0c;并使用qt进行图形化显示 一、什么是Windows PE格式中的导入表#xff1f; 在Windows中#xff0… 文章目录 前言一、什么是Windows PE格式中的导入表二、解析导入表并显示1.导入表的结构2.解析导入表3.显示导入表 前言 通过分析和解析Windows PE格式并使用qt进行图形化显示 一、什么是Windows PE格式中的导入表 在Windows中PE文件格式中的导入表Import Table是一个关键的数据结构它记录了程序在运行时所需调用的外部动态链接库DLL中的函数和变量。导入表的主要作用是在程序加载时帮助操作系统定位并加载这些外部库以便程序能够正确地调用其中的函数和访问变量。 导入表由一系列_IMAGE_IMPORT_DESCRIPTOR结构组成每个结构都包含一个指向外部库的导入地址表Import Address TableIAT的指针。IAT是一个包含函数名和对应函数地址的列表它提供了程序在运行时查找和调用外部库函数所需的信息。 当程序被加载到内存中时操作系统会使用导入表中的信息来解析IAT从而将外部库的函数地址填充到正确的位置。这样当程序调用一个外部库函数时它可以通过IAT直接找到正确的函数地址并执行相应的操作。 总之PE文件格式中的导入表是连接程序与外部动态链接库的关键桥梁它确保了程序在运行时能够正确地调用外部库中的函数和访问变量。 二、解析导入表并显示 1.导入表的结构 导入表的结构如下 IMAGE_IMPORT_DESCRIPTOR结构数组这是一个可变长度的数组每个元素描述一个导入的模块。数组的最后一个元素的所有字段都为零表示数组的结束。 struct IMAGE_IMPORT_DESCRIPTOR {union {DWORD Characteristics;DWORD OriginalFirstThunk;};DWORD TimeDateStamp;DWORD ForwarderChain;DWORD Name;DWORD FirstThunk; };每个IMAGE_IMPORT_DESCRIPTOR结构包含以下字段 OriginalFirstThunk指向一个IMAGE_THUNK_DATA结构数组该数组包含了导入函数的原始名称或序号。 TimeDateStamp时间戳表示导入表的创建时间。如果此值为零表示导入表未被绑定。 ForwarderChain链表的前一个结构的索引用于处理转发器导入。 Name以null结尾的字符串表示导入的模块名称。 FirstThunk指向一个IMAGE_THUNK_DATA结构数组该数组包含了导入函数的序号或地址。 IMAGE_THUNK_DATA结构这个结构表示一个导入函数的信息。它的大小取决于操作系统32位或64位。 对于32位系统IMAGE_THUNK_DATA结构定义如下 typedef struct _IMAGE_THUNK_DATA32 {union {DWORD ForwarderString;DWORD Function;DWORD Ordinal;DWORD AddressOfData;} u1; } IMAGE_THUNK_DATA32, *PIMAGE_THUNK_DATA32;对于64位系统IMAGE_THUNK_DATA结构定义如下 typedef struct _IMAGE_THUNK_DATA64 {union {ULONGLONG ForwarderString;ULONGLONG Function;ULONGLONG Ordinal;ULONGLONG AddressOfData;} u1; } IMAGE_THUNK_DATA64, *PIMAGE_THUNK_DATA64;2.解析导入表 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)));//解析数据目录parserDataDirectory();//解析导出表parserExportTable();//解析导入表parserImportTable();return true; }void PEParser::parserImportTable() {DWORD address 0;int iatSize 0;if (m_x86Flag){address m_optionalHeader32.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;iatSize sizeof(IMAGE_THUNK_DATA32);}else{address m_optionalHeader64.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;iatSize sizeof(IMAGE_THUNK_DATA64);}QListImportTableInfo importTable;RVA2FOAInfo info RVA2FOA(address);int i 0;char endFlag[20] {0};while (1){ImportTableInfo tableInfo{};//获取导入表数据IMAGE_IMPORT_DESCRIPTOR table;memcpy(table, m_fileData.data() info.FOA i * sizeof(IMAGE_IMPORT_DESCRIPTOR), sizeof(IMAGE_IMPORT_DESCRIPTOR));//20个0 导入表结束if (memcmp(table, endFlag, sizeof(endFlag)) 0){break;}RVA2FOAInfo nameInfo RVA2FOA(table.Name);int index m_fileData.indexOf(\0, nameInfo.FOA);//获取dll名称tableInfo.dllName m_fileData.mid(nameInfo.FOA, index - nameInfo.FOA);tableInfo.originalFirstThunk table.OriginalFirstThunk;tableInfo.forwarderChain table.ForwarderChain;tableInfo.name table.Name;tableInfo.timeDateStamp table.TimeDateStamp;tableInfo.firstThunk table.FirstThunk;RVA2FOAInfo originalFirstThunkInfo RVA2FOA(table.OriginalFirstThunk);RVA2FOAInfo firstThunkInfo RVA2FOA(table.FirstThunk);int j 0;while (1){ThunkInfo thunkInfo{};memcpy(thunkInfo.thunkValue, m_fileData.data() firstThunkInfo.FOA j * iatSize, iatSize);//IAT表结束if (thunkInfo.thunkValue 0){break;}memcpy(thunkInfo.thunkRVA, m_fileData.data() originalFirstThunkInfo.FOA j * iatSize, iatSize);//最高位为1 表示函数导出序号if (thunkInfo.thunkRVA 0X80000000){thunkInfo.functionName QString::number(thunkInfo.thunkRVA - 0X80000000).toUtf8();}else{//获取函数名称RVA2FOAInfo functionNameInfo RVA2FOA(thunkInfo.thunkRVA);thunkInfo.thunkFOA functionNameInfo.FOA;memcpy(thunkInfo.hint, m_fileData.data() functionNameInfo.FOA, sizeof(WORD));int functionNameFOA functionNameInfo.FOA sizeof(WORD);index m_fileData.indexOf(\0, functionNameFOA);thunkInfo.functionName m_fileData.mid(functionNameFOA, index - functionNameFOA);}tableInfo.thunkList.append(thunkInfo);j;}importTable.append(tableInfo);i;}emit sendImportTable(importTable); }3.显示导入表 void MainWindow::showImportTable(const QListImportTableInfo importTable) {ui-tableWidget_importTable-clearContents();ui-tableWidget_importTable-setRowCount(0);for (int i 0; i importTable.size(); i){ui-tableWidget_importTable-insertRow(i);ui-tableWidget_importTable-setItem(i, 0, new QTableWidgetItem(importTable[i].dllName));QTableWidgetItem *item ui-tableWidget_importTable-item(i, 0);item-setData(100, QVariant::fromValue(importTable[i]));ui-tableWidget_importTable-setItem(i, 1, new QTableWidgetItem(QString::asprintf(%d, importTable[i].thunkList.size())));ui-tableWidget_importTable-setItem(i, 2, new QTableWidgetItem(QString::asprintf(%08lX, importTable[i].originalFirstThunk)));ui-tableWidget_importTable-setItem(i, 3, new QTableWidgetItem(QString::asprintf(%08lX, importTable[i].timeDateStamp)));ui-tableWidget_importTable-setItem(i, 4, new QTableWidgetItem(QString::asprintf(%08lX, importTable[i].forwarderChain)));ui-tableWidget_importTable-setItem(i, 5, new QTableWidgetItem(QString::asprintf(%08lX, importTable[i].firstThunk)));} }void MainWindow::on_tableWidget_importTable_clicked(const QModelIndex index) {if (ui-tableWidget_importTable-rowCount() index.row()){QTableWidgetItem *item ui-tableWidget_importTable-item(index.row(), 0);ImportTableInfo info item-data(100).valueImportTableInfo();ui-tableWidget_iatTable-clearContents();ui-tableWidget_iatTable-setRowCount(0);for (int i 0; i info.thunkList.size(); i){ui-tableWidget_iatTable-insertRow(i);ui-tableWidget_iatTable-setItem(i, 0, new QTableWidgetItem(QString::asprintf(%016llX, info.thunkList[i].thunkValue)));ui-tableWidget_iatTable-setItem(i, 1, new QTableWidgetItem(QString::asprintf(%016llX, info.thunkList[i].thunkRVA)));ui-tableWidget_iatTable-setItem(i, 2, new QTableWidgetItem(QString::asprintf(%016llX, info.thunkList[i].hint)));ui-tableWidget_iatTable-setItem(i, 3, new QTableWidgetItem(info.thunkList[i].functionName));}} }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/909782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php做网站怎么布局wordpress node.js

概述本文大部分整理自《Java并发编程的艺术》,温故而知新,加深对基础的理解程度。指令序列的重排序我们在编写代码的时候,通常自上而下编写,那么希望执行的顺序,理论上也是逐步串行执行,但是为了提高性能&a…

个人网站做商城网站宽度设计

作者 | 磊哥来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)Nacos 是 Spring Cloud Alibaba 中一个重要的组成部分,它提供了两个重要的功能:服务注册与发现和统一…

国内高清视频素材网站推荐企业网站首页开发

题目 水题系列。给出一个图,求他的连通分量。 科普:连通分量就是一个图中可以连接最多点的子图(可以是它本身)的点数量。 输入 5(点的数量) 1 2(表示1和2连通) 3 4 2 3 0 0(表示停止输入) 输出 4 解题思路 Er…这道题没…

网站建设海报设计网店装修

Python 基本操作 (赋值、分支及循环语句、使用 import 导入库); Python 的 With 语句 ; NumPy ,Python 下常用的科学计算库。TensorFlow 与之结合紧密; 向量 和 矩阵 运算(矩阵的加减法、矩阵…

004_元组操作

1、定义元组 my_cars = "红旗", "五菱宏光", "雅迪" # 元组是用逗号识别的 print(my_cars) cars = ("奔驰", "宝马", "奥迪") print(cars)2、元组不可修…

个人作业-第二次软件工程作业

软件工程第二次作业课程 软件工程作业要求 个人编程作业的目标 实现一个论文查重程序,规范软件开发流程,熟悉Github进行源代码管理和学习软件测试GitHub仓库 https://github.com/chendongkai2004/3123004433一、PSP表…

代码流水线

取址,分析,执行 取址 根据PC内容访问主存储器,取出一条指令送到IR中 分析 对指令操作码进行译码,按照给定的寻址方式和地址字段中的内容形成操作数的有效地址EA,并从有效地址EA中取出操作数 执行 根据操作码字段,…

自学网站有哪些自学网关键词优化公司排名

前言 当你的应用程序需要一个快速、可扩展的内存数据库时,Redis是一个非常流行的选择。通过将Redis与Spring Boot集成,你可以轻松地利用Redis的功能,例如缓存、会话存储和消息队列等,从而提升应用程序的性能和可伸缩性。 在本教…

洛谷题单指南-进阶数论-P1516 青蛙的约会

原题链接:https://www.luogu.com.cn/problem/P1516 题意解读:长L的环形数轴,初始A在x坐标、一次跳m米,B在y坐标、一次跳n米,问最少跳几次AB相遇。 解题思路: 1、欧几里得算法 欧几里得算法(Euclidean Algorithm…

electron中的几个概念

这里记录一下,学习用┌─────────────────────────────────────────┐│ 主进程 (Main Process) ││ - main.js ││ …

仿网站wordpress 整合ckplayer

前言 JSON 平时大家都会用到,都不陌生,今天就一起来实现一个 JSON 的可视化工具。 大概长成下面的样子: 树展示 相比于现有的一些 JSON 格式化工具,我们今天制作的这个小工具会把 JSON 转为树去表示。其中: 橙色标…

电子商务网站建设阶段连云港网站建设推广

MySQL:Explain执行计划 使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈。 认识explain EXPLAIN SELECT * FROM user_info i LEFT JOIN user_grade g on i.id …

网站推广塔山双喜wordpress评论qq

计算机是现代社会中不可或缺的工具,而CPU(中央处理器)则是计算机的核心组件。CPU负责执行指令和控制计算机的各种操作,它的性能直接影响着计算机的速度和效率。 1. CPU的基本结构 CPU通常由以下几个主要组成部分构成&#xff1a…

外贸网站推广策划wordpress墨客吧

一、什么是Hooks函数? 想象一下,你在做饭,有一些调料你经常会用到,比如盐、酱油和辣椒。每次做饭时,你都会从柜子里拿出这些调料。如果你每次用完都把它们随便放在厨房的某个角落,下次做饭时就可能找不到它…

学校网站怎么做的好坏浙江网架公司

v-viewer简介 v-viewer 是一个 Vue 组件&#xff0c;用于显示图片和其他媒体内容的全屏查看器。它基于 Viewer.js&#xff0c;一个强大的图片查看库。 以下是一个基本的使用示例&#xff1a; <template><div v-viewer><img src"image1.jpg" />&…

做维修家具广告在哪个网站好北京市网站维护公司

初识国际化和ResourceBundle这个类主要用来解决国际化和本地化问题。国际化和本地化可不是两个概念&#xff0c;两者都是一起出现的。可以说&#xff0c;国际化的目的就是为了实现本地化&#xff0c;详细的介绍可以看本文的最后。比如对于“取消”&#xff0c;中文中我们使用“…

传统网站有没有建设必要性长春搜索排名提升

首发公号&#xff1a;Rand_cs 共享内核空间 我们常说&#xff0c;每个进程都有自己的虚拟地址空间&#xff0c;但其中内核部分是共享的。 这就有个问题&#xff0c;如何共享的&#xff1f; 系统启动时创建了一张内核页表&#xff0c;里面记录着内核地址空间与物理地址空间的…

网站能获取访问者关键词搜索引擎又称为

1.简介 RapidJSON 是一个 C 的 JSON 解析库&#xff0c;由腾讯开源。 支持 SAX 和 DOM 风格的 API&#xff0c;并且可以解析、生成和查询 JSON 数据。RapidJSON 快。它的性能可与strlen() 相比。可支持 SSE2/SSE4.2 加速。RapidJSON 独立。它不依赖于 BOOST 等外部库。它甚至…

详细介绍:PHP基础-数据类型(第九天)

详细介绍:PHP基础-数据类型(第九天)2025-09-22 17:07 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !…

实用指南:告别IP被封!分布式爬虫的“隐身”与“分身”术

实用指南:告别IP被封!分布式爬虫的“隐身”与“分身”术pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…