PE文件之导入表

1. 导入表

在这里插入图片描述

2. 显示导入表信息的例子

; 作用: 将RVA地址转成FOA即文件偏移
; 参数: _pFileHdr 	指向读到内存中文件的基址指针
;       _dwRVA 		目标RVA地址
; 返回: 目标RVA转成文件偏移的值
RVA2FOA PROC USES esi edi edx, _pFileHdr:PTR BYTE, _dwRVA:DWORDmov esi, _pFileHdr assume esi:ptr IMAGE_DOS_HEADER; 获取PE头mov edi, [esi].e_lfanewassume esi:nothingadd edi, esi assume edi:ptr IMAGE_NT_HEADERS32; 获取节数movzx ecx, [edi].FileHeader.NumberOfSectionsassume edi:nothing; 获取节表地址add edi, SIZEOF IMAGE_NT_HEADERS32assume edi:ptr IMAGE_SECTION_HEADER
L0:mov edx, _dwRVAcmp edx, [edi].VirtualAddressjb @Fmov eax, [edi].VirtualAddressadd eax, [edi].SizeOfRawDatacmp edx, eaxjae @Fsub edx, [edi].VirtualAddressadd edx, [edi].PointerToRawDatamov eax, edxjmp Ending
@@:add edi, SIZEOF IMAGE_SECTION_HEADERloop L0xor eax, eax
Ending:retRVA2FOA ENDP.data 
Crlf 				BYTE 0dh, 0ah, 0
szDllName 			BYTE "导出表: %s", 0dh, 0ah, 0
szSep				BYTE "---------------------------", 0dh, 0ah, 0
szINTRVA			BYTE "OriginalFirstThunk: 0x%08X", 0dh, 0ah, 0
szTimeStmp  		BYTE "TimeDateStamp: 0x%08X", 0dh, 0ah, 0
szForwarderChain	BYTE "ForwarderChain: 0x%08X", 0dh, 0ah, 0
szNameRVA			BYTE "Name: 0x%08X", 0dh, 0ah, 0
szFirstThunk		BYTE "FirstThunk: 0x%08X", 0dh, 0ah, 0dh, 0ah, 0
szFnInfo			BYTE "%hd %s", 0dh, 0ah, 0szBuf				BYTE 64 DUP(0).code 
; 作用: 打印输出导入表信息
; 参数: _pFileHdr 	指向读到内存中文件的基址指针
; 返回: 无
_getImportTblInfo PROC _pFileHdr:PTR BYTEpushad mov esi, _pFileHdrassume esi:PTR IMAGE_DOS_HEADERadd esi, [esi].e_lfanew assume esi:PTR IMAGE_NT_HEADERS32 mov esi, [esi].OptionalHeader.DataDirectory[8].VirtualAddresspush esimov eax, _pFileHdrpush eax call RVA2FOAmov esi, eax add esi, _pFileHdr assume esi:PTR IMAGE_IMPORT_DESCRIPTOR L0:; 确定导入表是否结束mov edx, [esi].Name1test edx, edx jnz @F jmp Ending 
@@:mov edx, [esi].OriginalFirstThunktest edx, edx jnz @F jmp Ending 
@@:mov edx, [esi].TimeDateStamptest edx, edx jnz @F jmp Ending 
@@:mov edx, [esi].ForwarderChaintest edx, edx jnz @F jmp Ending 
@@:mov edx, [esi].FirstThunktest edx, edx jnz @F jmp Ending 
@@:; 进行IAT显示mov edx, [esi].Name1 push edx push _pFileHdr call RVA2FOA add eax, _pFileHdr; 显示dll名称invoke wsprintf, OFFSET szBuf, OFFSET szDllName, eax invoke crt_printf, OFFSET szBuf invoke crt_printf, OFFSET szSep; 显示OriginalFirstThunk的RVA地址invoke wsprintf, OFFSET szBuf, OFFSET szINTRVA, [esi].OriginalFirstThunk invoke crt_printf, OFFSET szBuf; 显示时间戳invoke wsprintf, OFFSET szBuf, OFFSET szTimeStmp, [esi].TimeDateStamp invoke crt_printf, OFFSET szBuf; 显示ForwarderChaininvoke wsprintf, OFFSET szBuf, OFFSET szForwarderChain, [esi].ForwarderChain invoke crt_printf, OFFSET szBuf; 显示Name的RVA地址invoke wsprintf, OFFSET szBuf, OFFSET szNameRVA, [esi].Name1 invoke crt_printf, OFFSET szBuf; 显示FirstThunk的RVA地址invoke wsprintf, OFFSET szBuf, OFFSET szFirstThunk, [esi].FirstThunk invoke crt_printf, OFFSET szBuf; 打印具体函数信息; 获取INT的RVA地址, 把VA转成FOApush [esi].OriginalFirstThunkpush _pFileHdr call RVA2FOAadd eax, _pFileHdr
L1:assume eax:PTR IMAGE_THUNK_DATA mov ebx, [eax].u1.Functiontest ebx, ebx jz NextDescpush eax mov eax, [eax].u1.Functiontest eax, 80000000hjnz BySeqpush eax push _pFileHdrcall RVA2FOAadd eax, _pFileHdrassume eax:PTR IMAGE_IMPORT_BY_NAME movzx edx, WORD PTR [eax].Hintlea ebx, [eax].Name1 invoke wsprintf, OFFSET szBuf, OFFSET szFnInfo, edx, ebxinvoke crt_printf, OFFSET szBufpop eax add eax, SIZEOF IMAGE_THUNK_DATAjmp @F 
BySeq:@@:jmp L1 
NextDesc:push OFFSET Crlfcall crt_printfpush OFFSET Crlfcall crt_printfadd esi, SIZEOF IMAGE_IMPORT_DESCRIPTORjmp L0
Ending:popad ret _getImportTblInfo ENDP 

运行的部分截图:
在这里插入图片描述

3. 导入表图

在这里插入图片描述
(完)

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

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

相关文章

栈的应用场景(二)

有效的括号匹配 1.题目2.图分析3.代码实现 1.题目 2.图分析 3.代码实现 class Solution {public boolean isValid(String s) {//创建一个栈,来放左括号.Stack<Character> stack new Stack<>();//遍历字符串,左括号放进栈for(int i 0 ; i < s.length(); i){ch…

阿里云 Oss 权限控制

前言 最近公司的私有 Oss 服务满了&#xff0c;且 Oss 地址需要设置权限&#xff0c;只有当前系统的登录用户才能访问 Oss 下载地址。一开始想着用 Nginx 做个转发来着&#xff0c;Nginx 每当检测当前请求包含特定的 Oss 地址就转发到我们的统一鉴权接口上去&#xff0c;但是紧…

SpringCloudGateway实现数字签名与URL动态加密

文章目录 对称加密非对称加密什么是数字签名HTTPS与CA⭐Gateway网关的过滤器链如何对自己的路径传输设定一个数字签名&#xff1f;前端获取RSA公钥发送加密后对称密钥后端接收当前会话对称密钥并保存前端发送AES加密请求验证请求 如何实现URL的动态加密&#xff1f; 再网络传递…

基于Python3搭建qt开发环境

Python可视化编程相信大部分刚接触都是tkinter&#xff0c;tkinter是Python自带的库&#xff0c;不需要安装第三方库即可使用&#xff0c;在我的Python专栏中也有很多基于tkinter来设计的可视化界面。本篇文章将尝试另外一个Python的可视化编程库(pyqt)&#xff0c;与tkinter编…

深度学习 二:COVID 19 Cases Prediction (Regression)

Deep Learning 1. 回归算法思路2. 代码2.1 基础操作2.2 定义相关函数2.3.1 定义图像绘制函数2.3.2 数据集加载及预处理2.3.3 构造数据加载器2.3.4 构建前馈神经网络&#xff08;Feedforward Neural Network&#xff09;模型2.3.5 神经网络的训练过程2.3.6 模型评估2.3.7 模型测…

【考研数学】高等数学第七模块 —— 曲线积分与曲面积分 | 3. 对面积的曲面积分(第一类曲面积分)

文章目录 二、曲面积分2.1 对面积的曲面积分&#xff08;第一类曲面积分&#xff09;2.1.1 问题引入 —— 曲面的质量2.1.2 对面积的曲面积分定义及性质2.1.3 对面积的曲面积分的计算法 写在最后 二、曲面积分 2.1 对面积的曲面积分&#xff08;第一类曲面积分&#xff09; 2…

springboot单体项目如何拆分成微服务

要将一个Spring Boot单体项目拆分成微服务&#xff0c;可以按照以下步骤进行操作&#xff1a; 识别业务域&#xff1a;首先&#xff0c;需要对单体项目进行业务域的划分。将项目中的功能按照业务领域进行分类&#xff0c;每个业务领域可以成为一个独立的微服务。 定义服务接口…

字符和字节的区别

字节 1.字节是计算机存储容量的基本单位(Byte)&#xff0c;除了字节以外还有“比特”&#xff08;b&#xff09;&#xff1b;千字节&#xff08;KB&#xff09;&#xff1b;兆字节&#xff08;MB&#xff09;等&#xff0c;他们之间的换算关系是&#xff1a;   1B8b&#xff…

YTM32的电源管理与低功耗系统详解

YTM32的电源管理与低功耗系统详解 苏勇&#xff0c;2023年10月 文章目录 YTM32的电源管理与低功耗系统详解缘起原理与机制电源管理模型的功耗模式正常模式&#xff08;Normal&#xff09;休眠模式&#xff08;Sleep&#xff09;深度休眠模式&#xff08;DeepSleep&#xff09;…

Flutter+SpringBoot实现ChatGPT流实输出

FlutterSpringBoot实现ChatGPT流式输出、上下文了连续对话 最终实现Flutter的流式输出上下文连续对话。 这里就是提供一个简单版的工具类和使用案例&#xff0c;此处页面仅参考。 服务端 这里直接封装提供工具类&#xff0c;修改自己的apiKey即可使用&#xff0c;支持连续…

Python使用词云图展示

网上看到一个txt文本信息&#xff0c;共2351条饭否记录&#xff0c;据说是微信之父每天发的饭否记录&#xff0c;其实我不知道什么是饭否。我读取这个文本内容&#xff0c;展示到词语图上。之前也使用过&#xff0c;但是好久没有玩Python了&#xff0c;称假期空闲&#xff0c;练…

Spring的注解开发-注解方式整合MyBatis代码实现

之前使用xml方式整合了MyBatis&#xff0c;文章导航&#xff1a;Spring整合第三方框架-MyBatis整合Spring实现-CSDN博客 现在使用注解的方式无非是就是将xml标签替换为注解&#xff0c;将xml配置文件替换为配置类而已。 非自定义配置类 package com.example.Configure;import c…

黑马头条项目环境搭建

注册中心网关配置 spring:cloud:gateway:globalcors:add-to-simple-url-handler-mapping: truecorsConfigurations:[/**]:allowedHeaders: "*"allowedOrigins: "*"allowedMethods:- GET- POST- DELETE- PUT- OPTIONroutes:# 平台管理- id: useruri: lb://…

【新员工座位安排系统】python实现-附ChatGPT解析

1.题目 新员工座位安排系统 知识点:数组、统计、哈希表、差分、滑窗 时间限制: 1s 空间限制: 256MB 限定语言: 不限 题目描述: 工位由序列F1,F2,..,Fn组成,Fi值为0、1或2。其中0代表空置,1代表有人,2代表障碍物。 某一空位的友好度为左右连续老员工数之和为方便新员工学习求…

c# 委托 事件 lambda表达式

委托 C/C中的函数指针实例&#xff1a; typedef int (*Calc)(int a, int b); //这里必须加括号 int Add(int a, int b) {return a b; } int Sub(int a, int b) {return a - b; } int main() {int x 100;int y 200;int z 0;Calc funcPoint1 &Add;Calc funcPoint2 &am…

Android学习之路(19) ListView详解

一.ListView简介 在Android开发中&#xff0c;ListView是一个比较常用的控件。它以列表的形式 展示具体数据内容&#xff0c;并且能够根据数据的长度自适应屏幕显示。 二.ListView简单用法 代码部分 1.布局界面 activity_main.xml 代码&#xff1a; <?xml version"…

新手学习笔记-----编译和链接

目录 1. 翻译环境和运⾏环境 2. 翻译环境&#xff1a;预编译编译汇编链接 2.1 预处理 2.2 编译 2.2.1 词法分析 2.2.2 语法分析 2.2.3 语义分析 2.3 汇编 2.4 链接 3. 运⾏环境 1. 翻译环境和运⾏环境 在ANSI C的任何⼀种实现中&#xff0c;存在两个不同的环境。 第…

持续集成部署-k8s-命令行工具:基础命令的使用

持续集成部署-k8s-命令行工具:基础命令的使用 1. 资源类型与别名2. 资源操作2.1 创建对象2.2 显示和查找资源2.3 更新资源2.4 修补资源2.5 编辑资源2.6 scale 资源2.7 删除资源3. 格式化输出1. 资源类型与别名 资源类型缩写别名clusterscomponentstatusescsconfigmapscmdaemon…

LSTM+CRF模型

今天讲讲LSTM和CRF模型&#xff0c;LSTM&#xff08;长短期记忆&#xff09;是一种特殊的循环神经网络&#xff08;RNN&#xff09;模型&#xff0c;用于处理序列数据、时间序列数据和文本数据等。LSTM通过引入门控机制&#xff0c;解决了传统RNN模型在处理长期依赖关系时的困难…

win10 关闭病毒防护

windows10彻底关闭Windows Defender的4种方法 - 知乎