PE结构之绑定导入表

打印绑定导入表
//打印 绑定导入表
BOOL PrintBoundImport(__in char* m_fileName)
{char* Filebuffer = NULL;if (!GetFileBuffer(m_fileName, &Filebuffer)) return FALSE;PIMAGE_DOS_HEADER LPdosHeader = NULL;PIMAGE_NT_HEADERS LPntHeader = NULL;LPdosHeader = (PIMAGE_DOS_HEADER)Filebuffer;LPntHeader = (PIMAGE_NT_HEADERS)((CHAR*)LPdosHeader + LPdosHeader->e_lfanew);//如果是32位程序if (LPntHeader->OptionalHeader.Magic == 0x10b){PIMAGE_NT_HEADERS32 LPntHeader32 = LPntHeader;LPntHeader = NULL;PIMAGE_DATA_DIRECTORY LPdirBoundImport = &LPntHeader32->OptionalHeader.DataDirectory[11];PIMAGE_BOUND_IMPORT_DESCRIPTOR LPBoundImport = (CHAR*)LPdosHeader + RVAToFOA(LPdosHeader, LPdirBoundImport->VirtualAddress);CHAR* NameBase = LPBoundImport;while (LPBoundImport->TimeDateStamp != 0 && LPBoundImport->OffsetModuleName != 0){printf("时间戳:0x%x dll名字偏移:0x%x ForwarderRefs结构数量: %d dll名字 %s\n",LPBoundImport->TimeDateStamp, LPBoundImport->OffsetModuleName, LPBoundImport->NumberOfModuleForwarderRefs,(NameBase+ LPBoundImport->OffsetModuleName));LPBoundImport++;}return TRUE;}else{PIMAGE_NT_HEADERS64 LPntHeader64 = LPntHeader;LPntHeader = NULL;PIMAGE_DATA_DIRECTORY LPdirBoundImport = &LPntHeader64->OptionalHeader.DataDirectory[11];PIMAGE_BOUND_IMPORT_DESCRIPTOR LPBoundImport = (CHAR*)LPdosHeader + RVAToFOA(LPdosHeader, LPdirBoundImport->VirtualAddress);CHAR* NameBase = LPBoundImport;while (LPBoundImport->TimeDateStamp != 0 && LPBoundImport->OffsetModuleName != 0){printf("时间戳:0x%x dll名字偏移:0x%x ForwarderRefs结构数量: %d dll名字 %s\n",LPBoundImport->TimeDateStamp, LPBoundImport->OffsetModuleName, LPBoundImport->NumberOfModuleForwarderRefs, (NameBase + LPBoundImport->OffsetModuleName));LPBoundImport++;}return TRUE;}
}
IAT 表中的数据,在文件中可能已经不和INT表一样了,已经保存了需要导入的函数的VA(内存地址或者说绝对地址). 如果IMAGE_IMPORT_DESCRIPTOR结构(导入表的结构)中的TimeDateStamp==0 ,表示 没有绑定 ,如果为-1,说明已经绑定,这时 IAT表的数据已经是导入函数的VA了
IAT 中的 IMAGE_THUNK_DATA 结构将被导入函数的实际地址覆盖。磁盘上的可执行文件具有其 IAT 中其他 DLL 中 API 的实际内存地址。加载绑定的可执行文件时,Windows 加载程序可以绕过查找每个导入的 API 并将其写入 IAT 的步骤。正确的地址已经在那里了!但是,这只有在DLL正确对齐时才会发生
Inside Windows:深入了解 Win32 可移植可执行文件格式,第 2 部分 |Microsoft 学习
相关文章:
PE结构之绑定导入表
打印绑定导入表 //打印 绑定导入表 BOOL PrintBoundImport(__in char* m_fileName) {char* Filebuffer NULL;if (!GetFileBuffer(m_fileName, &Filebuffer)) return FALSE;PIMAGE_DOS_HEADER LPdosHeader NULL;PIMAGE_NT_HEADERS LPntHeader NULL;LPdosHeader (PIMAGE…...
【python学习】1-2 配置python系统环境变量
1.点击“我的电脑”右键,点击属性,点击“高级系统设置”,再点击环境变量。 2.选择“系统变量”中的Path后,点击编辑。 3.点击新建,添加如图两个路径,即是python安装的路径位置后,点击确定。...
日均千万订单的交易平台设计稿
业务背景 平台主要售卖电子商品和少量特定的实物商品。 经营模式,主要分为平台商家和自营店,自营店的流量占整个平台业务的50%以上,我负责自营店交易履约相关业务。 以前的架构,平台交易和履约中心是所有流量共享,在…...
如何在 iPad 上恢复已删除的历史记录?
iPad 配备了一个名为 Safari 的内置网络浏览器。这是一种在旅途中保持联系和浏览网页的强大且便捷的方式。但如果您不小心删除了浏览历史记录,则尝试恢复它可能会很令人沮丧。 幸运的是,您可以通过多种方法在 iPad 上恢复已删除的 Safari 历史记录。您应…...
Haar cascade训练人脸小模型做人脸辨别
代码讲解 1. 导入必要的库 import cv2 import os from pathlib import Path import shutil import numpy as np import loggingcv2: OpenCV 库,用于图像处理和计算机视觉。os: 提供了一种便携的方式使用操作系统依赖的功能。pathlib.Path: 提供了对象导向的路径处…...
DBA | 如何将 .mdf 与 .ldf 的数据库文件导入到SQL Server 数据库中?
[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 原文链接:DBA | 如何将 .mdf 与 .ldf 的数据库文件导入到SQL Server 数据库中? 如何将 (.mdf) 和 (.ldf) 的SQL Server 数据库文件导入到当前数据库中? Step 1.登录到 Sql Server 服…...
【差分数组】个人练习-Leetcode-3229. Minimum Operations to Make Array Equal to Target
题目链接:https://leetcode.cn/problems/minimum-operations-to-make-array-equal-to-target/description/ 题目大意:给出两个数组nums[]和target[],可以对nums[]数组进行这样两种操作 给某个区间内的子列全加1给某个区间内的子列全减1 求…...
HTML5--裸体回顾
免责声明:本文仅做分享~ 详情请参考以下: HTML 系列教程 (w3school.com.cn) 菜鸟教程 - 学的不仅是技术,更是梦想! --本文是光秃秃的空壳. 标题标签 段落标签 换行和水平线 文本格式化标签 (一般用左边的ÿ…...
【网络安全】CVE-2024-46990: Directus环回IP过滤器绕过实现SSRF
未经许可,不得转载。 文章目录 背景漏洞详情受影响版本解决方案背景 Directus 是一款开源 CMS,提供强大的内容管理 API,使开发人员能够轻松创建自定义应用程序,凭借其灵活的数据模型和用户友好的界面备受欢迎。然而,Directus 存在一个漏洞,允许攻击者绕过默认的环回 IP …...
问:JVM的垃圾收集算法你知道哪些,有什么区别?
GC(垃圾回收器)的概念 GC,即垃圾回收(Garbage Collection),是计算机程序中一种自动管理内存的机制。其目的是自动回收不再被使用的对象所占用的内存空间,从而避免内存泄漏和内存溢出࿰…...
Python selenium库学习使用实操四
系列文章目录 Python selenium库学习使用实操 Python selenium库学习使用实操二 Python selenium库学习使用实操三 文章目录 系列文章目录[TOC](文章目录) 前言一、元素获取二、选项解析总结 前言 在Python selenium库学习使用实操二中提到了下拉框的操作,一种是标…...
用Go开发跨平台GUI
本篇内容是根据2023年3月份#271 Cross-platform graphical user interfaces音频录制内容的整理与翻译 这一期与 Wails 和 Fyne 的创建者一起深入研究为不同架构和操作系统编写 Go 代码。 译者注: Wails的作者是在澳大利亚悉尼的威尔士人,github头像是威尔士的旗帜,Wails也是Wa…...
云原生开发 - 工具镜像(简约版)
在微服务和云原生环境中,容器化的目标之一是尽可能保持镜像小型化以提高启动速度和减少安全风险。然而,在实际操作中,有时候需要临时引入一些工具来进行调试、监控或问题排查。Kubernetes提供了临时容器(ephemeral containers&…...
Mac 电脑pink 后端ip地址进行本地联调
文章目录 0: 使用ping 192.39.192.180查看是否能ping通1:点击访达2:在访达里面 shift commit g 打开前往路径的窗口3:在窗口中输入地址/private/etc/hosts4:打开hosts文件 添加后端地址(如:192.39.192.180 localhost:80805:保存 后端ip为192.39.192.180…...
iPhone使用指南:如何在没有备份的情况下从 iPhone 恢复已删除的照片
本指南将向您展示如何在没有备份的情况下从 iPhone 恢复已删除的照片。我们所有人在生活中的某个时刻都一定做过一些愚蠢的事情,例如从手机或电脑中删除一些重要的东西。这是很自然的,没有什么可羞耻的。您可能在辛苦工作一天后回来。当突然想看一些照片…...
黑马程序员 javaWeb基础学习,精细点复习【持续更新】
文章目录 WEB开发一、HTML1.html介绍 二、CSS1.CSS介绍2.CSS导入方式3.CSS选择器4.CSS属性 三、JavaScript1.介绍2.浏览器3.js的三种输出方式4.js定义变量5.js数据类型6.js运算符7.全局函数8.函数定义9.js数组对象10.js正则对象11.字符串对象12.自定义对象13.BOM浏览器对象模型…...
【C++设计模式】行为型模式:中介者模式
行为型模式:中介者模式 中介者模式通过引入一个中介者对象来集中控制对象之间的交互。这样可以解耦多个对象之间的复杂交互关系,使系统更易于维护和扩展。 假设我们有一个简单的聊天室应用,其中有每个用户可以发送群聊消息给其他用户&#…...
关于C语⾔内存函数 memcpy memmove memset memcmp
memcpy使⽤和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 这个函数在遇到 \0 的时候并不会停下来。 如果source和destination有任何的重叠&am…...
华为---Super VLAN简介及示例配置
目录 1. Super VLAN技术产生背景 2. Super VLAN概念 3. Super VLAN应用场景 4. Super VLAN工作原理 5. Super-VLAN主要配置命令 6. Super-VLAN主要配置步骤 7. 示例配置 7.1 示例场景 7.2 网络拓扑 7.3 配置代码 7.4 代码解析 7.5 测试验证 1. Super VLAN技术产生背…...
PHP 中浮点数 array_sum 求和精度丢失问题
首先给定一个数组: // 该数组中,amount 为 float/double 或 string 不影响结果 $arr [[amount > 1493.66],[amount > 1493.66],[amount > 1493.66] ];求和: $amount array_sum(array_column($arr, amount));我们已知晓的结果如下…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
