20.5 函数转发器/已知的DLL/DLL重定向/模块的基地址重定位--《Windows核心编程》
一、函数转发器
函数转发器是D L L的输出节(导出段)中的一个项目,用于将对一个函数的调用转至另一个 DLL中的另一个函数。
可以在DLL中使用函数转发器:
#pragma comment(linker,"/export:SomeFunc=Dll.SomeOtherFunc") // SomeFunc是转发Dll.dll中的SomeOtherFunc函数
#pragma comment(linker,"/export:Index=Dll.SomeOtherIndex") // 序号转发
二、已知的DLL
操作系统提供的某些DLL得到了特殊的处理。这些DLL称为已知的DLL。它们与其他DLL基本相同,但是操作系统总是在同一个目录中查找它们,以便对它们进行加载操作。
注册表:计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs 存储着这些已知DLL的信息。
当给 LoadLibreay/LoadLibreayEx 传入 "SomeDllName",系统会用正常的搜索规则定位这个DLL。
当给 LoadLibreay/LoadLibreayEx 传入 "SomeDllName.dll",系统会先去掉.dll,用 SomeDllName 对比如上注册表中名称项,
(1)如果没有注册表中相符的项,系统会用正常的搜索规则定位这个DLL。
(2)如果有,系统会去 C:\Windows\System32 目录查找数据项对应的dll并载入,如果未找到,会返回NULL,GetLastError 返回 ERROR_FILE_NOT_FOUND;
三、DLL重定向
Windows 2000之后,DLL新增了重定向特性:强制操作系统的加载程序首先从应用程序的目录中加载模块,只有未找到文件的时候,才会在其他的目录中搜索。
四、模块的基地址重定位
vs 中可以进行设置
20.5 函数转发器/已知的DLL/DLL重定向/模块的基地址重定位--《Windows核心编程》的更多相关文章
- 【windows核心编程】DLL相关(3)
DLL重定向 因为DLL的搜索路径有先后次序,假设有这样的场景:App1.exe使用MyDll1.0.dll, App2.exe使用MyDll2.0.dll, MyDll1.0 和 MyDll2.0是 ...
- windows核心编程 DLL技术 【转】
注:本文章转载于网络,源地址为:http://blog.csdn.net/ithzhang/article/details/7051558 本篇文章将介绍DLL显式链接的过程和模块基地址重定位及模块绑 ...
- 《Windows核心编程系列》二十谈谈DLL高级技术
本篇文章将介绍DLL显式链接的过程和模块基地址重定位及模块绑定的技术. 第一种将DLL映射到进程地址空间的方式是直接在源代码中引用DLL中所包含的函数或是变量,DLL在程序运行后由加载程序隐式的载入, ...
- 《windows核心编程系列》十九谈谈使用远程线程来注入DLL。
windows内的各个进程有各自的地址空间.它们相互独立互不干扰保证了系统的安全性.但是windows也为调试器或是其他工具设计了一些函数,这些函数可以让一个进程对另一个进程进行操作.虽然他们是为调试 ...
- Windows核心编程 第二十章 DLL的高级操作技术
第2 0章 D L L的高级操作技术 看了下这章的内容,谈不上高级,都是些常用相关,但是还是有一些细节需要注意. 20.1 DLL模块的显式加载和符号链接 如果线程需要调用D L L模块中的函数,那么 ...
- 《windows核心编程系列》十七谈谈dll
DLL全称dynamic linking library.即动态链接库.广泛应用与windows及其他系统中.因此对dll的深刻了解,对计算机软件开发专业人员来说非常重要. windows中所有API ...
- 对象布局已知时 C++ 对象指针的转换时地址调整
在我调试和研究 netscape 系浏览器插件开发时,注意到了这个问题.即,在对象布局已知(即对象之间具有继承关系)时,不同类型对象的指针进行转换(不管是隐式的从下向上转换,还是强制的从上到下转换)时 ...
- 【windows核心编程】DLL相关(2)
关于DLL的延迟加载 延迟加载DLL,使用的是隐式加载方式,当为exe使用的DLL指定为延迟加载的时候,连接器会将exe的[导入段]中去除该DLL的相关信息,同时在exe中嵌入一个新的[延迟加载段]表 ...
- 【windows核心编程】DLL相关(1)
DLL相关的东西 1.DLL的加载方式 隐式: #pragma comment(lib, "XX.lib"); 编译器去查找名为XX.dll的DLL,除了名字相同,该DLL和该LI ...
- 【windows核心编程】远程线程DLL注入
15.1 DLL注入 目前公开的DLL注入技巧共有以下几种: 1.注入表注入 2.ComRes注入 3.APC注入 4.消息钩子注入 5.远线程注入 6.依赖可信进程注入 7.劫持进程创建注入 8.输 ...
随机推荐
- Python 学习笔记: 从变量到装饰器
从变量开始 python 中全局变量在函数作用域内只能读,不能"写".如果要在函数作用域内实现修改全局变量值操作,需要使用关键字 global 显示指明该变量是全局变量. 但是,在 ...
- vue 中对style、disable 等样式进行条件判断
本文为博主原创,未经允许不得转载: 一 原生用法 style="width: 100%; margin-top: 20px" disabled 二 三元表达式 <a :st ...
- 05-逻辑仿真工具VCS-执行过程
Verilog Simulation Event Queue 主要了解VCS是如何处理交给它的代码的 Verilog的仿真事件队列,介绍VCS如何处理交给它的代码.VCS是Synopsys公司的,支持 ...
- [转帖]GRUB2 配置文件详解
https://www.cnblogs.com/fluidog/p/15176726.html 1. GRUB2配置文件 GRUB2 的配置文件通常为 /boot/grub2/grub.cfg,虽然此 ...
- [转帖]Linux系统NVME盘分区和挂载
https://www.jianshu.com/p/04327f1b97cb 查看系统里面识别到的硬盘和分区的信息 $ sudo fdisk -l Disk /dev/nvme1n1: 1.8 TiB ...
- [转帖]Jmeter压力测试工具安装及使用教程
https://www.cnblogs.com/monjeo/p/9330464.html 一.Jmeter下载 进入官网:http://jmeter.apache.org/ 1.第一步进入官网如下图 ...
- [转帖]VCSA证书过期问题处理
1. 故障现象 2022年10月25日,登陆VC报错. 按照报错信息,结合官方文档,判断为STS证书过期导致. vCenter Server Appliance (VCSA) 6.5.x, 6.7. ...
- [转帖]一次 Java 进程 OOM 的排查分析(glibc 篇)
https://juejin.cn/post/6854573220733911048 遇到了一个 glibc 导致的内存回收问题,查找原因和实验的的过程是比较有意思的,主要会涉及到下面这些: Linu ...
- Redis-dump Docker搭建的快速指南
背景 最近学习redis想能够将dump文件进行导入处理. 看到比较好的办法都是使用ruby ,但是公司的网络太感人了. 想着比较简单的办法是通过docker方式来搭建. 这里简单记录一下搭建过程. ...
- 同步存储读取vuex中store中的值
main.js import store from "./store"; Vue.prototype.$store = store; 在 store中的index.js中 impo ...