【旧文章搬运】Windows中全局钩子DLL的加载过程

原文发表于百度空间,2011-03-24
==========================================================================

看雪上别人问的一个问题,顺便在此记录下吧~~

kd> kvn
 # ChildEBP RetAddr  Args to Child
00 0012f7b8 77d2dbfb 0012f81c 00000000 00000008 kernel32!LoadLibraryExW+0x2 (FPO: [Non-Fpo])
01 0012f7e4 7c92eae3 0012f7f4 00000080 00000080 USER32!__ClientLoadLibrary+0x32 (FPO: [1,3,4])
02 0012f7e4 80501a60 0012f7f4 00000080 00000080 ntdll!KiUserCallbackDispatcher+0x13 (FPO: [0,0,0])
03 ef8f35e8 805a1779 ef8f36a0 ef8f369c ef8f38e8 nt!KiCallUserMode+0x4 (FPO: [2,3,4])
04 ef8f3644 bf84ce33 00000042 ef8f36b0 00000080 nt!KeUserModeCallback+0x87 (FPO: [Non-Fpo])
05 ef8f38cc bf84cf3e ef8f38e8 00000000 00000000 win32k!ClientLoadLibrary+0xb2 (FPO: [Non-Fpo])
06 ef8f3afc bf83f449 00000002 00000000 e10622c0 win32k!xxxLoadHmodIndex+0x86 (FPO: [1,133,0])
07 ef8f3b68 bf83f4a0 03e49c40 00000003 00040140 win32k!xxxCallHook2+0x19b (FPO: [5,21,4])
08 ef8f3b84 bf8407c8 00000003 00040140 00000002 win32k!xxxCallHook+0x26 (FPO: [4,0,0])
09 ef8f3c6c bf83eec5 00000100 00000000 bbe34058 win32k!xxxCreateWindowEx+0x48c (FPO: [15,49,0])
0a ef8f3d20 8054160c 80000000 ef8f3cec ef8f3ce0 win32k!NtUserCreateWindowEx+0x1c1 (FPO: [Non-Fpo])
0b ef8f3d20 7c92eb94 80000000 ef8f3cec ef8f3ce0 nt!KiFastCallEntry+0xfc (FPO: [0,0] TrapFrame @ ef8f3d64)
0c 0012f7e4 7c92eae3 0012f7f4 00000080 00000080 ntdll!KiFastSystemCallRet (FPO: [0,0,0])
0d 0012f870 77d1fe13 77d1fdd9 80000000 0012fd98 ntdll!KiUserCallbackDispatcher+0x13 (FPO: [0,0,0])
0e 0012fd14 77d1fecc 80000000 0012fd98 0012fdac USER32!NtUserCreateWindowEx+0xc
0f 0012fdc0 77d1ff66 80000000 00487d80 0012fdac USER32!_CreateWindowEx+0x1ed (FPO: [13,25,0])
10 0012fdfc 00404dd2 00000000 00487d80 00477510 USER32!CreateWindowExA+0x33 (FPO: [12,0,0])
11 0012fe70 00447830 00400000 00000001 0012ffc0 Procexp+0x4dd2
12 00000000 00000000 00000000 00000000 00000000 Procexp+0x47830

原文地址:https://www.cnblogs.com/achillis/p/10183650.html

时间: 2024-10-08 10:12:15

【旧文章搬运】Windows中全局钩子DLL的加载过程的相关文章

IOS中的生命周期及加载过程

这一节,主要讲解UIKit框架下,应用程序的生命周期,UIView的生命周期,异常处理流程及控制器的加载过程. 四大对象关系图 应用程序生命周期 对上面的流程进行说明: 1. 程序启动执行,先进入main函数: int main(int argc, char * argv[]) 2. 执行UIApplicationMain函数: return UIApplicationMain(argc, argv, nil, NSStringFromClass([HKAppDelegate class]));

记一次排错,windows日志 模块 DLL C:\Windows\system32\inetsrv\aspnetcore.dll 未能加载。返回的数据为错误信息。

这个错误是在我本地开发环境,不是生产环境,如果是生产环境我就挂了....开发环境也痛苦啊,重装系统的话,我估计装系统+所有软件,少说也得1天..... 错误产生:重装IIS (尼玛,IIS总有一个小毛病,安装微软IIS7的rewrite模块,每次点击空白规则,就提示您所做的修改将会丢失,要保存修改吗?无论我点取消或者确定,IIS面板就会关闭,因为之前一直用的一个第三方重写模块,没法分站点重写,现在两个站点的路径一样没法重写,谁知道那个问题谁顺带回复我一下.) 重装完了IIS以后,不管访问哪个网站

web 项目添加 x86 的dll 引用,模块 DLL c:\WINDOWS\system32\inetsrv\aspnetcore.dll 未能加载。

最近的项目要添加一个 x86 编译的dll, 首先添加引用,编译,报错: 首先判断是 项目中不能添加 x86 的引用,所以把所有的项目都按照 x86 的方式编译一遍,同时对应IIS 的应用池,也修改为启用32位. 本以为可以顺利显示,但是却报错.报错的是本机开发环境,但是部署到服务器测试却能够正常显示. 根据网上的提示,查看 系统日志里的应用程序日志, 再根据此错误信息,网上搜索,终于找到了解决方法. 1. 如果报错是 rewrite.dll , 则在程序-应用和管理 中修复 对应的IIS UR

固定dll的加载基址的方法

调试dll的时候会有一件事情比较烦人,就是dll加载的地址不会很固定(默认设置下编译的dll基址总是0x10000000,多个同基址的dll加载时,后面的肯定会被重定位),这给前后多次调试时对比分析结果造成了一些麻烦,要解决这个问题,有两种办法.方法一:直接修改dll文件PE头中的ImageBase为一个不大可能被占用的地址.但是这个方法有一个小小的局限,就是有些文件是存在校验的,改了文件之后会出一些问题,比如拒绝加载之类的. 这种情况就要用第二种方法了. 方法二:动态修改dll的加载基址 当然

VC++开发Windows系统全局钩子

本文的大部分内容属于对一篇网文的实践与练习,同时参考的还有一本书,在此向网文与书的作者表示敬意. 这个程序是一个windows系统键盘监控程序,随着开机自动启动,可以监控系统中各用户的键盘,并将按键记录写在指定的log文件里. 程序分为两个部分:全局钩子DLL和一个隐藏的单文档应用程序. 全局钩子DLL 创建基于“MFC AppWizard(dll)”的“扩展MFC DLL(Extension MFC DLL)”类型工程KeyBoardHook 在自动生成的源文件KeyBoardHook.cpp

CS0009:未能打开元数据文件System.ComponentModel.DataAnnotations.dll 试图加载格式不正确的程序。

问题描述: CS0009: 未能打开元数据文件“c:\Windows\Microsoft.NET\assembly\GAC_MSIL \System.ComponentModel.DataAnnotations\v4.0_4.0.0.0__31bf3856ad364e35 \System.ComponentModel.DataAnnotations.dll”--“试图加载格式不正确的程序. 网上搜索出来的资源比较少,修复VS也没有用,特地写这小文章. 试了网上方法: 把"C:\Windows\M

前端设计中关于外部js文件加载的速度优化

在一般情况下,许多人都是将<script>写在了<head>标签中,而许多浏览器都是使用单一的线程来加载js文件的,从上往下,从左往右. 若是加载过程出错,那么网页就会阻塞,就像许多网站用Google的CDN库,而我们在墙内访问一样.页面不会出来,一直加载这个js文件,直到浏览器放弃加载为止! 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default

打造DLL内存加载引擎学习笔记

原文:http://www.pediy.com/kssd/index.html -- 病毒技术 -- 病毒知识 -- Anti Virus专题 首先看下我们内存加载引擎的流程. 1. 申请一段大小为dll映射内存后的映像大小的内存空间. 2. 移动各个区段的数据到申请的内存. 2. 修复引入表结构的地址表. 4. 通过重定位结构修复需要重定位的地址. 5. 调用DllMain入口点 流程解析: pe结构中nt header结构当中的ImageSize存放的是我们整个文件映射到内存后的映像大小,这

动态链接库DLL的加载:隐式加载(载入时加载)和显式加载(运行时加载)

静态链接库在链接时,编译器会将 .obj 文件和 .LIB 文件组织成一个 .exe 文件,程序运行时,将全部数据加载到内存. 如果程序体积较大,功能较为复杂,那么加载到内存中的时间就会比较长,最直接的一个例子就是双击打开一个软件,要很久才能看到界面.这是静态链接库的一个弊端. 动态链接库有两种加载方式:隐式加载和显示加载. 隐式加载又叫载入时加载,指在主程序载入内存时搜索DLL,并将DLL载入内存.隐式加载也会有静态链接库的问题,如果程序稍大,加载时间就会过长,用户不能接受. 显式加载又叫运行