网站大量收购独家精品文档,联系QQ:2885784924

《C++_Hook(钩子)编程》.pdf

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《C++_Hook(钩子)编程》.pdf

C++ Hook(钩子)编程,通过内联汇编,使类成员函数代替全局函数(静态函数) 编程语言:C/C++ 编译环境:Visual Studio 2008 核心方法::通过内联汇编,构造类对象独享的函数(委托),完成了类成员函数到普通全局函 数的转化,并在Windows Hook(钩子)编程中得到成功的实践。 关键字:C++,委托,内联汇编,Hook ,成员函数 引文: 前段时间曾编写了一个自认为很完善的.NET 平台上的 Hook(钩子)动态链接库(DLL), 并进一步完成了 GUI 界面,但是在部署时却发现的其局限性,很多用户都没有安装.NET 平 台,其平台的最小安装(.NET 2.0)也需要 21M ,如果使用NOMO(2.0)免安装发布的话也需要 小 10M(而且使用 NOMO 在自动运行和兼容性上也有待商榷) 。 因此,我下定决心,准备彻底和托管代码决裂,回归 C/C++,再次实现上述功能,然而 真正编写时才发现,经典的 C++果然不是盖的,昔日被 C 的各种调试不通过折磨的记忆还 未消退,今日又在开始时陷入苦战,正如前人所说,C++这种强类型语言,喜欢在繁琐的符 号和语法上做文章。如果处理不好这些,大概做不了大项目,还是去.NET 或 Java 的快乐平 台逍遥去吧~微微感慨,赶快进入正题。 正文: 本文的目的是研究类成员函数与普通函数之区别,以及不同调用方式之间的区别,进而 通过内联汇编语句模仿特定的调用,从而完成通过普通函数指针调用类成员函数的功能。因 此主要部分为研究和尝试的过程,如希望直接查看Hook 编程的结果,可直接查看尾部代码。 使用过 Windows Hook 编程的同志们都知道,在程序中是通过如下语句来加载钩子,卸 载钩子。 C/C++ Code: HHOOK SetWindowsHookEx( //加载钩子 int idHook, HOOKPROC lpfn, //钩子函数的指针 HINSTANCE hMod, DWORD dwThreadId ); BOOL UnhookWindowsHookEx( //卸载钩子 HHOOK hhk ); 其中最重要的就是 HOOKPROC lpfn这个函数指针,查看此函数的形式,为: C/C++ Code: LRESULT CALLBACK HookProcess( //钩子函数 int nCode, WPARAM wParam, LPARAM lParam ); //其中 CALLBACK 的定义为 #define CALLBACK __stdcall 其中,值得注意的是,这个钩子函数需要是一个普通__stdcall 调用的 C 函数,而在 C++ 中可以理解为某个全局函数 (非类成员函数,全局访问)或者是一个类的静态函数 (static, 全局访问)。 让我们再观察一个类成员函数和全局函数的区别,我建立了一个简单的演示代码,如下 代码: C/C++ Code: #include windows.h LRESULT CALLBACK HookProcess1( // HookProcess1是一个全局函数 int nCode, WPARAM wParam, LPARAM lParam){ return NULL;} class WinHook { public: int value; //定义一个成员变量,以便于测试访问 LRESULT CALLBACK HookProcess2(// HookProcess2是一个类的成员函数 int nCode, WPARAM wParam, LPARAM lParam) {

文档评论(0)

ghfa + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档