WinPE基础知识之导入表

// 导入表 (结构体数组,以一个全零元素为结尾,每一个数组元素,代表一个PE文件导入信息)
// 导入表存储的是从其它PE文件导入过来的函数名、序号,加载到内存之后,还存储这些函数的地址
typedef struct _IMAGE_IMPORT_DESCRIPTOR {
    union {
        DWORD   Characteristics;            // 0 for terminating null import descriptor
        DWORD   OriginalFirstThunk;         // (重要)指向一个结构体数组的相对虚拟地址(RVA),即INT
    } DUMMYUNIONNAME;
    DWORD   TimeDateStamp;                  // 时间戳
    DWORD   ForwarderChain;                 // 链表的前一个结构
    DWORD   Name;                           // (有用)指向链表库名字的指针(RVA)
    DWORD   FirstThunk;                     // (重要)指向一个结构体数组的相对虚拟地址(RVA),即IAT
} IMAGE_IMPORT_DESCRIPTOR;

// INT与IAT所指的数据类型(结构体数组 以全零为结尾)
// 在磁盘文件中他们存储的数据是相同的,在加载到内存后,加载器把相应PE文件的函数地址覆盖到这里
// 在磁盘文件中,起作用的只有后面两个成员
// 这个结构占据四个字节,假如最高位为1,那么序号导入起作用,假如最高位为0,那么是最后一个成员起作用
// 判断最高位是否为1使用系统提供的宏IMAGE_SNAP_BY_ORDINAL(),参数就是这个结构体
typedef struct _IMAGE_THUNK_DATA32 {
    union {
        DWORD ForwarderString;      // PBYTE
        DWORD Function;             // 导入函数的地址,在加载到内存后,这里才起作用
        DWORD Ordinal;              // 假入是序号导入的用到这里
        DWORD AddressOfData;        // 假入是函数名导入的用到这里,它指向一个PIMAGE_IMPORT_BY_NAME结构体
    } u1;
} IMAGE_THUNK_DATA32;

// 上面结构体AddressOfData 指向的结构体
typedef struct _IMAGE_IMPORT_BY_NAME {
    WORD    Hint;    // 函数编号
    CHAR   Name[1];  // 表示函数名的字符串
} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;

原文地址:https://www.cnblogs.com/duxie/p/10848262.html

时间: 2024-08-06 18:22:32

WinPE基础知识之导入表的相关文章

WinPE 基础知识

Windows PE的全名是WindowsPreinstallationEnvironment(WinPE)直接从字面上翻译就是“Windows预安装环境”.微软的本意是:WinPE仅用做系统维护,并设置了各种限制.可以简单的理解为:PE是Windows系统的超级精简版.超级权限版(以系统system账户登录)!对于无法进入系统.修复系统.分区.重装系统等问题都可以进入PE进行操作,因此PE是系统维护强大的武器! 微软原版的PE,只有“命令行”即DOS窗口.网上流传的各种版本都是“高手们”修改出

正则表达式基础知识及常用表单验证正则(使用时查找为主,需多加基础方法的例子)

一.需要转义的特殊符号,也就是需要在前面添加\:!$ * + = | . ?  \  / [] {}  ^ () 二.正则表达式基本形式及方法:A:re =new RegExp(“a”,“i”);  //new出来的匹配方式B:   re=/a/i ;                            //直接量(更常用) pattern.exec(str)     //返回数组pattern.test(str)       //返回布尔值pattern.toSource(str)    

WinPE基础知识之导出表

// 导出的东西包括函数(变量.类)地址,序号,函数(变量.类)名 typedef struct _IMAGE_EXPORT_DIRECTORY { DWORD Characteristics; // (没用) 保留值,恒为0 DWORD TimeDateStamp; // (没用) 和文件头中的时间一样的 WORD MajorVersion; // (没用) 主版本号 WORD MinorVersion; // (没用) 次版本号 DWORD Name; // (有用) 本PE文件的名字,也就

HTML+CSS+JS基础知识

目录 对HTML+CSS+JS的理解 基础知识 对HTML+CSS+JS的理解 基础知识 插入样式表的三种方式 外部样式表:<link rel="stylesheet" type="text/css" href="mystyle.css"> 内部样式表:<style type="text/css"> body {background-color: red} p {margin-left: 20px} &

包导入基础知识

# -*- coding: utf-8 -*- #python 27 #xiaodeng #包导入基础知识 #注意: #除了模块名之外,导入也可以指定目录路径.python代码的目录就称为包,因此这类导入就称之为包导入. #实际上,包导入时把计算机上的目录变成另一个python命名空间,而属性则对应于目录中所包含的子目录和模块文件. #这是高级特征,他提供了层次,对于组织大型系统内的文件很方便.而且可以简化模块搜索路径的设置. #包导入的运作机制: #在import语句中列举简单文件名的地方,可

哈希表基础知识

哈希表基础知识 哈希法又称散列法.杂凑法以及关键字地址计算法等,相应的表称为哈希表,是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法. 其基本思想是:首先在元素的关键字k和元素的存储位置p之间建立一个对应关系f,使得p=f(k),f称为哈希函数.创建哈希表时,把关键字为k的元素直接存入地址为f(k)的单元:以后当查找关键字为k的元素时,再利用哈希函数计算出该元素的存储位置p=f(k),从而达到按关键字直接存取元素的目的. 但关键字集合很大时,关键字值不同的元素可能会映射到哈希表的同

SQL server基础知识(表操作、数据约束、多表链接查询)

SQL server基础知识 一.基础知识 (1).存储结构:数据库->表->数据 (2).管理数据库 增加:create database 数据库名称 删除:drop database 数据库名称 查询:select name from master..sysdatabases 修改:alter database 数据库名称(在 sql server 中修改与数据库关联的文件和文件组.在数据库中添加或删除文件和文件组.更改数据库或其文件和文件组的属性) (3).管理表 选择数据库:use 数

《JAVASCRIPT高级程序设计》表单基础知识和文本框脚本

在HTML中,表单是由<form>元素来表示,在javascript中,表单对应的是HTMLFormElement类型,它具有一些独有的属性和方法: 一.表单基础知识 1.取得表单的方式 var form = document.getElementById("form1");//取得页面中id=form1的元素 var form1 = document.forms[0];//取得页面中的第一个表单 var myform = document.forms["myFo

Oracle基础知识笔记(11) 建表、更新、查询综合练习

有某个学生运动会比赛信息的数据库,保存了如下的表: 运动员sporter(运动员编号sporterid,运动员姓名name,运动员性别sex,所属系号department) 项目item(项目编号itemid,项目名称itemname,项目比赛地点location) 成绩grade(运动员编号id,项目编号itemid,积分mark) 请用SQL语句完成如下功能: 1.  建表,并在相应字段上增加约束: 定义各个表的主键和外键约束: 运动员的姓名和所属系别不能为空: 积分要第为空值,要么为6,4