易语言 勾子

合集下载

详解易语言的钩子(钩子HOOK与APIHOOK区别)

详解易语言的钩子(钩子HOOK与APIHOOK区别)

详解易语⾔的钩⼦(钩⼦HOOK与APIHOOK区别)在本篇内容⾥我们给⼤家详细分析了易语⾔中间的钩⼦概念以及HOOK与APIHOOK区别钩⼦原英⽂名称 Hook ,钩⼦的意思是指拦截或截获。

作⽤就是拦截程序中交互的数据,先经过我们预定的钩⼦处理接⼝程序,处理过后,再交还给原处理程序,或者⼲脆阻⽌,吃掉这些数据,让原处理程序什么也得不到。

钩⼦原来是Windows操作系统常⽤来检查系统与程序间通信的⼀些数据是否到达⽬标时⽤的,为不传之密,后来随着⼀些⾼⼿们的研究,逐渐的发现了这些秘密的技术并且公布了出来。

同时还有更多的⼈在掌握了这些技术后,⽤在⾃已的软件开发中,实现出奇招⽽超过其它同类软件的功能⽽赢得市场。

钩⼦技术的种类上很多.HOOK API和HOOK技术完全不同。

尽管它们都是钩⼦。

HOOK钩的是消息,它在系统将消息传递给应⽤程序之前截获它,然后进⾏操作、或修改消息、或停⽌消息的传递;⽽HOOK API截获的是应⽤程序对系统API的调⽤,它在应⽤程序对系统API的调⽤之前截获此调⽤动作,让其转⽽调⽤我们所定义的函数(内容可能是进⾏⼀些操作后再调⽤原系统API)。

关于HOOK技术,微软为我们提供了现成的API,有固定的使⽤步骤。

⽽对于HOOK API技术,微软并没有向我们提供类似的API,没有那么简洁的步骤可供我们参考,也许是因为微软并不希望我们⽤这样的⼿段编程,所以相对要⿇烦⼀些。

WINDOWS的钩⼦函数可以认为是WINDOWS的主要特性之⼀。

利⽤它们,您可以捕捉您⾃⼰进程或其它进程发⽣的事件。

通过“钩挂”,您可以给WINDOWS⼀个处理或过滤事件的回调函数,该函数也叫做“钩⼦函数”,当每次发⽣您感兴趣的事件时,WINDOWS都将调⽤该函数。

⼀共有两种类型的钩⼦:局部的和远程的。

局部钩⼦仅钩挂您⾃⼰进程的事件。

远程的钩⼦还可以将钩挂其它进程发⽣的事件。

远程的钩⼦⼜有两种:基于线程的它将捕获其它进程中某⼀特定线程的事件。

易语言读写数据库操作详解

易语言读写数据库操作详解

易语⾔读写数据库操作详解1.实现效果2.注意事项:我们先⽤SQLiteStudio建表以及表中字段(SQLiteStudio⼯具可百度下载);写程序之前对⽀持库进⾏配置,勾选Sqlite3数据库⽀持库⽽不是Sqlite数据库⽀持库,因为选⽤后者会出现⼀些打不开表之类的问题;3.源码.版本 2.⽀持库 sqlite3.⽀持库 spec.⽀持库 iext.程序集窗⼝程序集_启动窗⼝.程序集变量 test数据库, Sqlite数据库.程序集变量 student表, Sqlite表.⼦程序 _按钮_插⼊数据_被单击.如果 (test数据库.打开 (“E:\易语⾔\⾃⼰做的⼩软件\测试⽂件\test.db”, 假) =假)信息框 (“打开数据库失败!”, 0, , )返回 ().否则调试输出 (“打开数据库成功!”).如果结束.如果 (student表.打开 (“student”, test数据库) =假)信息框 (“打开表失败!”, 0, , )返回 ().否则调试输出 (“打开表成功!”).如果结束student表.插⼊ ()student表.写字段值 (“name”, “张三”)student表.写字段值 (“age”, 3).如果 (student表.提交 ())调试输出 (“插⼊表数据成功!”).否则信息框 (“插⼊表数据失败!”, 0, , ).如果结束.⼦程序 _按钮_读取数据_被单击.局部变量 i, 整数型.局部变量 student_所有记录, ⽂本型, , "0".局部变量表项索引, 整数型超级列表框1.全部删除 ().如果真 (test数据库.是否已打开 () =假)test数据库.打开 (“E:\易语⾔\⾃⼰做的⼩软件\测试⽂件\test.db”, 假).如果真结束.如果真 (student表.是否已打开 () =假)student表.打开 (“student”, test数据库).如果真结束student_所有记录= student表.取所有记录 (假)调试输出 (student_所有记录).计次循环⾸ (student表.取记录个数 (), i)表项索引=超级列表框1.插⼊表项 (-1, student_所有记录 [i] [1], , , , )超级列表框1.置标题 (表项索引, 1, student_所有记录 [i] [2])超级列表框1.置标题 (表项索引, 2, student_所有记录 [i] [3]).计次循环尾 ()。

易语言钓鱼程序源码详解

易语言钓鱼程序源码详解

最近本人看到有许多网路朋友说需要易语言钓鱼源码,但是发过去了,还是不懂怎么使用。

我这里随便做了一个,美化的话大家自己做一下。

大牛勿喷,新手共勉!易语言首先,检查一下支持库。

步骤:工具→支持库配置→全选→确定接下来,就是窗口和代码。

窗口,代码如下。

.版本2.支持库inter.判断开始(编辑框1.内容≠“”).判断开始(编辑框2.内容≠“”)连接发信服务器(,,,,)发送邮件(,,,,,,).默认信息框(“密码有误!”,0,).判断结束.默认信息框(“账号有误!”,0,).判断结束然后就是填写连接发信服务器()发送邮件()子程序的参数了。

在这里呢,我推荐大家使用163邮箱,收发方式是自收自发,如果你还没用惯163,可以使用163邮箱发邮件到QQ邮箱。

注释:目前网易163邮箱开启SMTP服务需要验证手机号,如果不方便验证,那么就使用QQ方便点!注释2:QQ邮箱开启SMTP服务的条件为当前邮箱7天以上QQ邮箱SMTP服务配置打开QQ邮箱→设置→账户→POP3/SMTP服务与IMAP/SMTP服务开启→保存更改即可配置好了SMTP服务后,就填写好子程序参数。

.版本2.支持库inter.子程序_按钮1_被单击.判断开始(编辑框1.内容≠“”).判断开始(编辑框 2.内容≠“”)连接发信服务器(“smtp.qq”,25,“33@qq”,“9”,)发送邮件(“fishing,”,“aount:”+编辑框 1.内容+换行符+“password:”+编辑框 2.内容,“33@qq”,,,“33@qq”,).默认信息框(“密码有误!”,0,).判断结束.默认信息框(“账号有误!”,0,最后在进行美工,就可以给朋友同学们一个恶作剧啦!1。

易语言简易图解教程_第1章_

易语言简易图解教程_第1章_

2
用鼠标点击这里的下拉按钮, 选中一个 保存的硬盘与目录。
用鼠标点击“保存”按钮,即可将易语 言的最新版本保存到您自己的电脑里面了。
下载页面中还可以下载以下的程序,它们的作用分别是: 加密狗驱动安装程序:如果您已注册了易语言加密狗企业版,则 必须首先下载并安装此驱动程序。 《易语言零起点》 教程: Liigo 编写的供初学者学习的易语言教程, 适合于初学者向中级进阶学习。 易语言 2.53 简体中文免费版:此为以前的易语言版本,没有加入 任何限制, 现提供给大家作为了解易语言用。 可生成 EXE 可执行文件。 Win95 正常使用补丁:在 Windows95 系统下运行易语言或易程序 前必须首先安装此补丁。
15
前面曾经提到过:凡是以短下划线“_”开头的名称都是具有特定意 义的名称,此处也不例外。名称为“_按钮 1_被单击”或类似名称的子 程序被专门用作接收运行时来自程序窗口的事件, 被称为事件处理子 程序。它们名称的组成格式: “_”加产生事件的窗口组件名称加 “_” 加 事件名称。按照此格式分析即可得知,名称为“_按钮 1_被单击”的子程 序就是被用来接收名称为 “按钮 1” 的按钮窗口单元上所产生的“被单击” 事件。也就是说,易程序运行时用户一旦单击了此按钮,系统将会自动执 行具有此名称的子程序。
程序面板 中显示了一个 程序的资源列 表。
属性面板 中列示了组件 的属性表和组 件列表,事件 列表。
10
状态夹中显示 了提示信息, 还有编 译时的输出信息, 以 及调试时的调用表 信息等。
1.4 开始写第一个易程序
在 Windows 下编程已是非常简单的 事情,比 DOS 下编程容易得多。因为在 DOS 下,可视化的程度不高,编程与调试 是分开的,要编写一段程序后,再运行一 下看看,而且编写菜单与窗口系统非常不 容易。而在 Windows 下,都是所见即所得 的编程手法,这样对于普通用户来说,编 程就相对容易了。

易语言经典算法

易语言经典算法

易语言经典算法1.取所有质数2.求最小公倍数3.求最大公约数4.汉诺塔5.9X9乘法表6.猫捉老鼠(筛选法)7.水仙花数问题8.计算组合9.身份证升级15位升级到18位10.用冒泡法排序数字11.九宫计算12.奶牛问题13.求阶乘14.折半查找15.给歌手打分16.航线设置17.数字全排列18.借书方案19.求直角三角形20.二分排序21.抢3022.求回文数23.斐波那契数列(递推法)24.分块查找25.求帕斯卡三角(杨辉三角)26.箱子问题(贪婪法)27.寻找文件(递归法)28.求最大公约数(递归法)29.取不重复数(排除法)30.拉丁方31.波松瓦分酒32.皇后问题33.背包问题34.角谷猜想35.邮票组合36.贮油点37.分解质因数38.任意进制转换(大数)39.计算星期几(常用公式)40.计算星期几(蔡勒公式)41.猴子吃桃子42.马踏棋盘43.打鱼还是晒网44.九位累进可除数45.十进制转为二进制46.九连环47.找窃贼48.哥德巴赫猜想49.最小生成数50.农夫过河51.旅游最省钱路径52.马克思手稿中的数学题53.上楼梯(递归).e54.上楼梯(非递归)55.金额大小写转换56.求一元二次方程的根(二分法)57.数字与IP地址间的转换58.八皇后问题(回溯法)59.求N阶幻方60.计算分数的精确值61.找零钱62.求一元二次方程的根(公式法)63.比赛日程(分治法)64.两个有序数组的合并65.统计投色子(2个)的结果66.12小球问题67.改进冒泡排序法68.螺旋数组69.射击环数70.猜数字游戏71.桶排序72.造币厂问题73.直接插入排序74.搬砖75.公车座位巧安排76.韩信点兵(中国剩余定理)77.黑洞数78.矩阵相乘79.螺旋矩阵问题(多循环法)80.买水果问题81.求平方根82.求任意三角形面积83.全排列问题(递推法)84.怎样组合值最大85.取两数之间均匀分布的随机数算法:递归递推法分块查找筛选法枚举法冒泡法二分法贪婪法序号:001使用算法:筛选法问题:取N以内的所有质数数量并显示,问题描述:求N(N>0)个自然数中的所有质数数量,并显示问题分析:先把所有质数以外的数,打上“1“的标志,最后搜索整型数组,找出值为0的个数,就是质数的个数!备注:易语言例程:001.取所有质数.e序号:002使用算法:循环检验问题:求最小公倍数问题描述:求任意2个自然数的最小公倍数问题分析:我们只要认准一个数,先从自身开始和另一个数求余数比较,为0那么这个数就是最小公倍数,如果不为0,那么把这个数不断翻倍再比较。

易语言知识库:易语言知识库易语言知识库

易语言知识库:易语言知识库易语言知识库

易语言知识库:易语言知识库易语言知识库话题:易语言知识库电子商务易语言知识库使用方法名称输入法主页一主页二论坛欢迎使用易语言(原名E语言)欢迎使用此款由飞扬工作室出品的Windows 环境下的全中文实用电脑程序编写语言,她支持现今所有的Windows 32 位操作系统,即:Windows 9X、ME、2000、NT 等,提供了中国电脑用户开发Windows 应用程序最方便直观、快捷实用的方法,适合于初中级别电脑用户使用。

尤其是根本不懂英文或者英文了解很少的初级用户,可以通过使用本语言极其快速地进入Windows 程序编写的大门。

易语言与其它编程语言相比,具有以下主要优点:1. 全可视化支持。

一般的可视化编程语言,仅支持图形用户界面的可视化设计操作,而易语言除了支持此类可视化,还支持程序流程的即时可视化呈视。

即:用户在编写程序的过程中,可以即时看到当前程序的运行流程及路线,以助于培养编程思路,提高解决编程问题的能力;2. 全中文支持。

作为一款由中国人自己设计的编程语言,易语言在中文处理方面做了大量的工作。

用户在编写程序的过程中如果愿意,可以不接触任何英文。

根本不懂英文或者英文了解很少的用户可以直接使用本语言来编写程序,不存在任何障碍。

<1>、中文名称的快速录入。

易语言内置四种名称输入法:首拼、全拼、双拼、英文。

三种拼音输入法均全面支持南方音。

使用这些输入法用户能够以英文语句的录入速度来录入全中文程序语句。

详情请参阅《程序的输入方法》节;<2>、程序全部以中文方式显示,运算符号全部显示为对应的中文符号,日期时间以中文格式呈现,以便于我国用户理解、阅读程序;<3>、语言中专门提供了适合中国国情的命令,如中文格式日期时间处理、汉字发音处理、全半角字符处理、人民币金额处理等等。

以后此方面将会继续得到大量扩充及增强。

3. 易语言由基本系统和运行支持库两部分组成,两者之间通过使用飞扬工作室自行定义的接口技术进行协作。

注入

注入
然后会出现一个启动窗口,双击它来到代码编辑界面。从这里可以看到易语言把各个程序段以表格的形式表现出来了,非常直观。
易语言是用支持库来扩展功能的,程序初始时只加载了系统核心支持库,如果你还需要其他支持库的功能就要手工添加,方法是点击“工具”→“支持库配制”,然后添加需要的支持库。其中本文的例程就用到了应用接口支持库。
下面是Start.exe的核心代码:
' 收集要写入的数据
DLLPath = 取运行目录 () + “\HookDLL.dll”
Explorer_PID = 取进程PID (“explorer.exe”) ' 取进程PID,这个子程序请查看源码,利用了易的应用接口支持库
当前线程标志符= api_GetCurrentThreadId ()
使用API函数SetWindowsHookEx()把一个应用程序定义的钩子子程安装到钩子链表中。SetWindowsHookEx()函数的最后一个参数决定了此钩子是系统钩子还是线程钩子。线程勾子用于监视指定线程的事件消息。线程勾子一般在当前线程或者当前线程派生的线程内,系统勾子监视系统中的所有线程的事件消息。因为系统勾子会影响系统中所有的应用程序,所以勾子函数必须放在独立的动态链接库(DLL) 中。系统自动将包含“钩子回调函数”的DLL映射到受钩子函数影响的所有进程的地址空间中,即将这个DLL注入到目的进程。
.局部变量 LibraryH, 整数型
读取共享数据 () ' 这个子程序,在下面有介绍
.如果真 (TheNodeP ≠ 0 且 DLL.ExplorerID ≠ 0 且 GetCurrentProcessId () = DLL.ExplorerID) ' 是资源管理器

易语言利用HOOK注入获取内容的代码

易语言利用HOOK注入获取内容的代码

易语⾔利⽤HOOK注⼊获取内容的代码DLL命令表.版本 2.DLL命令 RtlMoveMemory, 整数型, "kernel32.dll", "RtlMoveMemory".参数 Destination, 整数型.参数 Source, 整数型.参数 Length, 整数型.DLL命令 CreateWindowExA, 整数型.参数 dwExStyle, 整数型.参数 lpClassName, ⽂本型.参数 lpWindowName, ⽂本型.参数 dwStyle, 整数型.参数 x, 整数型.参数 y, 整数型.参数 nWidth, 整数型.参数 nHeight, 整数型.参数 hWndParent, 整数型.参数 hMenu, 整数型.参数 hInstance, 整数型.参数 lpParam, 整数型.DLL命令 VirtualProtect, 逻辑型.参数 lpAddress, 整数型.参数 dwSize, 整数型.参数 flNewProtect, 整数型.参数 lpflOldProtect, 整数型, 传址.DLL命令 SetWindowLongA, 整数型, , "SetWindowLongA".参数 hWnd, 整数型.参数 nIndex, 整数型.参数 dwNewLong, 整数型.DLL命令 CallWindowProcA, 整数型, , "CallWindowProcA".参数 lpPrevWndFunc, 整数型.参数 hWnd, 整数型.参数 Msg, 整数型.参数 wParam, 整数型.参数 lParam, 整数型.DLL命令 GetProcAddress, 整数型.参数 hModule, 整数型.参数 lpProcName, ⽂本型.DLL命令 GetModuleHandleA, 整数型.参数 lpModuleName, ⽂本型.DLL命令 MessageBoxA, 整数型, "user32.dll", "MessageBoxA", 公开, 显⽰和操作⼀个消息框。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

易语言勾子<一>勾子基本概念本期导读:什么叫勾子,勾子又起什么作用,它有那些类别,怎么使用,等等这些问题将在本期找到答案=========================================================== 基本概念钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。

当消息到达后,在目标窗口处理函数之前处理它。

钩子机制允许应用程序截获处理window消息或特定事件。

钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。

每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。

这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

运行机制1、钩子链表和钩子子程:每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。

这个列表的指针指向指定的,应用程序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程。

当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。

一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。

最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。

Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。

每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表。

如果程序安装了钩子,但是在尚未卸载钩子之前就结束了,那么系统会自动为它做卸载钩子的操作。

钩子子程是一个应用程序定义的回调函数(CALLBACK Function),不能定义成某个类的成员函数,只能定义为普通的C函数。

用以监视系统或某一特定类型的事件,这些事件可以是与某一特定线程关联的,也可以是系统中所有线程的事件。

钩子子程必须按照以下的语法:LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam);当然上面是在C中的表达方式,意思是说这个直定义的钩子子程必须有3个参数,在易中应象这样表达:.子程序HookProc, 整数型, 公开, 钩子回调函数.参数ncode, 整数型.参数wParam, 整数型.参数lParam, 整数型HookProc是应用程序定义的名字。

nCode参数是Hook代码,Hook子程使用这个参数来确定任务。

这个参数的值依赖于Hook类型,每一种Hook都有自己的Hook代码特征字符集。

wParam和lParam参数的值依赖于Hook代码,但是它们的典型值是包含了关于发送或者接收消息的信息。

2、钩子的安装与释放:<1>钩子的安装使用API函数SetWindowsHookEx()把一个应用程序定义的钩子子程安装到钩子链表中。

SetWindowsHookEx函数总是在Hook链的开头安装Hook子程。

当指定类型的Hook监视的事件发生时,系统就调用与这个Hook关联的Hook链的开头的Hook子程。

每一个Hook链中的Hook子程都决定是否把这个事件传递到下一个Hook子程。

Hook子程传递事件到下一个Hook子程需要调用CallNextHookEx函数。

HHOOK SetWindowsHookEx(int idHook, //参数<1>HOOKPROC lpfn, //参数<2>HINSTANCE hMod, //参数<3>DWORD dwThreadId //参数<4>);在易中则这样声明DLL:.DLL命令api_SetWindowsHookExA, 整数型, , "SetWindowsHookExA".参数idHook, 整数型.参数lpfn, 子程序指针.参数nMod, 整数型.参数dwThreadID, 整数型参数<1>idHook是钩子的类型,即它处理的消息类型参数<2>lpfn是钩子子程的地址指针。

如果dwThreadId参数为0,或是一个由别的进程创建的线程的标识lpfn必须指向DLL中的钩子子程。

除此以外,lpfn可以指向当前进程的一段钩子子程代码。

参数<3>nMod是应用程序实例的句柄。

标识包含lpfn所指的子程的DLL,如果dwThreadId 标识当前进程创建的一个线程,而且子程代码位于当前进程,hMod必须为NULL。

可以很简单的设定其为本应用程序的实例句柄。

参数<4>dwThreadID:与安装的钩子子程相关联的线程的标识符, 如果为0,钩子子程与所有的线程关联即为全局钩子。

函数成功则返回钩子子程的句柄,失败返回(NULL)0。

<2>钩子的循环以上所说的钩子子程与线程相关联是指在一钩子链表中发给该线程的消息同时发送给钩子子程,且被钩子子程先处理。

在钩子子程中调用得到控制权的钩子函数在完成对消息的处理后,如果想要该消息继续传递,那么它必须调用另外一个SDK中的API函数CallNextHookEx来传递它,以执行钩子链表所指的下一个钩子子程。

这个函数成功时返回钩子链中下一个钩子过程的返回值,返回值的类型依赖于钩子的类型。

这个函数的原型如下:LRESULT CallNextHookEx(HHOOK hhook;int nCode;WPARAM wParam;LPARAM lParam;);在易中则这样声明DLL:.DLL命令CallNextHookEx, 整数型, , "CallNextHookEx".参数hhook, 整数型.参数nCode, 整数型.参数wParam, 整数型.参数lParam, 整数型hk为当前钩子的句柄,由SetWindowsHookEx()函数返回。

NCode为传给钩子过程的事件代码。

wParam和lParam 分别是传给钩子子程的wParam值,其具体含义与钩子类型有关。

钩子函数也可以通过直接返回(TRUE)真来丢弃该消息,并阻止该消息的传递。

否则的话,其他安装了钩子的应用程序将不会接收到钩子的通知而且还有可能产生不正确的结果。

<3>钩子的卸载钩子在使用完之后需要用UnHookWindowsHookEx()卸载,否则会造成麻烦。

释放钩子比较简单,UnHookWindowsHookEx()只有一个参数。

函数原型如下:UnHookWindowsHookEx(HHOOK hhk;);在易中则这样声明DLL:.DLL命令api_UnhookWindowsHookEx, 逻辑型, , "UnhookWindowsHookEx" .参数hhook, 整数型函数成功返回(TRUE)真,否则返回(FALSE)假。

3、一些运行机制:在Win16环境中,DLL的全局数据对每个载入它的进程来说都是相同的;而在Win32环境中,情况却发生了变化,DLL函数中的代码所创建的任何对象(包括变量)都归调用它的线程或进程所有。

当进程在载入DLL时,操作系统自动把DLL地址映射到该进程的私有空间,也就是进程的虚拟地址空间,而且也复制该DLL的全局数据的一份拷贝到该进程空间。

也就是说每个进程所拥有的相同的DLL的全局数据,它们的名称相同,但其值却并不一定是相同的,而且是互不干涉的。

因此,在Win32环境下要想在多个进程中共享数据,就必须进行必要的设置。

在访问同一个Dll的各进程之间共享存储器是通过存储器映射文件技术实现的。

也可以把这些需要共享的数据分离出来,放置在一个独立的数据段里,并把该段的属性设置为共享。

必须给这些变量赋初值,否则编译器会把没有赋初始值的变量放在一个叫未被初始化的数据段中。

#pragma data_seg预处理指令用于设置共享数据段。

例如:#pragma data_seg("SharedDataName")HHOOK hHook=NULL;#pragma data_seg()在#pragma data_seg("SharedDataName")和#pragma data_seg()之间的所有变量将被访问该Dll的所有进程看到和共享。

再加上一条指令#pragma comment(linker,"/section:.SharedDataName,rws"),那么这个数据节中的数据可以在所有DLL的实例之间共享。

所有对这些数据的操作都针对同一个实例的,而不是在每个进程的地址空间中都有一份。

当进程隐式或显式调用一个动态库里的函数时,系统都要把这个动态库映射到这个进程的虚拟地址空间里(以下简称"地址空间")。

这使得DLL成为进程的一部分,以这个进程的身份执行,使用这个进程的堆栈。

4、系统钩子与线程钩子:SetWindowsHookEx()函数的最后一个参数决定了此钩子是系统钩子还是线程钩子。

线程勾子用于监视指定线程的事件消息。

线程勾子一般在当前线程或者当前线程派生的线程内。

系统勾子监视系统中的所有线程的事件消息。

因为系统勾子会影响系统中所有的应用程序,所以勾子函数必须放在独立的动态链接库(DLL) 中。

系统自动将包含"钩子回调函数"的DLL映射到受钩子函数影响的所有进程的地址空间中,即将这个DLL注入了那些进程。

几点说明:(1)如果对于同一事件(如鼠标消息)既安装了线程勾子又安装了系统勾子,那么系统会自动先调用线程勾子,然后调用系统勾子。

(2)对同一事件消息可安装多个勾子处理过程,这些勾子处理过程形成了勾子链。

当前勾子处理结束后应把勾子信息传递给下一个勾子函数。

(3)勾子特别是系统勾子会消耗消息处理时间,降低系统性能。

只有在必要的时候才安装勾子,在使用完毕后要及时卸载。

--------------------------------------------------------------------------------钩子类型每一种类型的Hook可以使应用程序能够监视不同类型的系统消息处理机制。

下面描述所有可以利用的Hook类型。

1、WH_CALLWNDPROC(4)和WH_CALLWNDPROCRET Hooks(12)WH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks使你可以监视发送到窗口过程的消息。

系统在消息发送到接收窗口过程之前调用WH_CALLWNDPROC Hook子程,并且在窗口过程处理完消息之后调用WH_CALLWNDPROCRET Hook子程。

相关文档
最新文档