首页 > 编程知识 正文

c语言查题,自定义指令的钩子函数

时间:2023-05-03 11:54:29 阅读:114332 作者:2331

1、会用c语言写钩子函数例子的人

示例: HWND hWnd=NULL; //定义为全局变量HHOOK hKeyboard; HHOOK hMouse; lresultcallbackmouseproc (int ncode、WPARAM wParam、LPARAM lparam ) /鼠标挂接函数({return 1; 如果返回//非零值,则表示已处理当前消息,并且不再将此消息传递到目标窗口。 (lresultcallbackkeyboardproc (int ncode,WPARAM wParam, LPARAMLPARAM(if ) vk _ F4==wparam (1==lparam 291 ) ) ) /系统后门: Alt F4钥匙关闭程序{:sendmessagea 当发生挂接监视的特定事件时,系统调用挂接函数进行处理。 挂接函数的格式因事件而异。 以鼠标钩子函数为例说明钩子函数的原型。 lresultcallbackhookproc [ int ncode,WPARAM wParam,LPARAM lParam参数wParam和lParam涉及挂接的消息,如鼠标位置、状态和键盘按钮nCode包含有关消息本身的信息,例如是否从消息队列中删除。 在挂接函数中实现自定义功能后,调用函数CallNextHookEx .将挂接信息传递给挂接链中的下一个挂接函数。 CallNextHookEx .的原型如下。 lresultcallnexthookex(hhookhhk、int nCode、WPARAM wParam、LPARAM lParam )参数hhk是挂钩手柄。 代码、wParam和lParam是挂接函数。 当然,也可以通过直接返回TRUE并销毁邮件来阻止邮件的传递。

2、胡克函数原理c/c

我个人的理解:钩子函数其实是函数指针,系统或软件定义了一些钩子,你把这些钩子挂在钩子上! 简言之,有些操作系统需要根据情况进行不同的处理,在这种情况下需要定义挂钩。 具体操作通过用户乘以的挂接函数实现。 例如# include ' stdio.h ' void (* g _ say _ func ) ) void ); voidregist_say(void(*pfunc ) void ) ) {g_say_func=pfunc; }void humen_say () printf('Helloworld!

(); }void dog_say () printf ) ' wowo!

(); }void cat_say () printf ) ' miaomiao! (); }void say_hello () {g_say_func ); }void main () regist_say ) dog_say; //注册挂接函数say_hello (; }以上只是个人的理解!

3,请告诉我gddfk钩子函数的使用方法和作用

有两种类型的Windows挂接函数:全局和线程。 的全局挂接函数可以捕获任何APP应用程序的消息,但必须是标准DLL才能实现,而不是VB。 VB可以线程化的是当前APP应用程序的消息,影响鼠标消息的捕获636f70797a643133愚人节46166的捕获。 SetWindowsHookEx定义如下: declarefunctionsetwindowshookexlib ' user32 ' alias ' setwindowshookexa ' (byvalidhookaslong,byvallpfn ByVal hmod As Long, byvaldwthreadidaslong (aslongidhook是挂接类型,例如WH_KEYBOARD捕获键盘消息,WH_MOUSE捕获鼠标消息。 hmod用于全局挂接,VB必须设置为0才能实现挂接。 dwThreadId用于线程挂接VB,可以设置为App.ThreadID。 lfn是挂钩函数,在VB中可以使用地址of来获得挂钩函数的地址。 此函数取决于挂接的类型。 例如,如果键盘挂接不是publicfunctionkeyboardproc (byvalncodeaslong,_ ByVal wParam As Long,_ ByVal lParam As Long ) aslong代码为0

4,有人能详细谈谈胡克函数吗?

胡克函数,举个例子吧。 假设你设计了程序。 其中重要的模块是a模块,a模块的主要函数是a (函数。 此模块需要更新一些功能才能进行软件升级,但如果您不想在更新功能时完全替换a模块,则可以采用这样的策略。 在a模块中定义函数

指针,void(*a)(void); 在调用a()函数的地方使用这样的语句: if(a) a(); 在B模块中实现具体的功能,并且在B模块初始化的时候讲外部定义的函数指针a赋初值,这样当a模块需要更新的时候只要改变B模块中的定义就可以了。 归纳一下:钩子函数就是在真正的模块中只是一个函数指针,而这个指针的赋值是再其它模块中实现的。不好意思,没说清楚,上面讲的是回调函数,钩子函数属于回调函数的一个特例。 我是做Linux开发,win32平台具体的api不清楚,不过机制都是一样,想看win32可以看这个链接

5, 钩子程序是什么东西

木马钩子其实也是一个dll文件,这个东东讲起来比较麻烦。我尽量说简单点。dll文件叫动态链接库文件,系统正常运行需要调用一些程序就是通过dll文件里的函数来执行的,一个正常运行的系统进程会调用许多的dll文件,而这些dll文件在系统用到某些功能时还会调用其它的dll文件。木马钩子就是这样一种dll文件,通过其内置的函数,使系统进程认为这个dll文件是个正常的需要调用的dll,然后再通过这个dll来启动木马。这就有点象使用钩子一样,先钩住挂靠再贴上去。------说得不是很贴切。

名词解释

模块

模块(module)系指由复数个具基础功能之组件,组件组成之具特定功能之组件,该组件用以组成具完整功能之系统、设备或程序;泛用于各软,硬件领域。通常以其功能,用途命名,如散热模块、存储器模块、游戏模块等。

函数

函数(function)在数学中为两不为空集的集合间的一种对应关系:输入值集合中的每项元素皆能对应唯一一项输出值集合中的元素。 其定义通常分为传统定义和近代定义,前者从运动变化的观点出发,而后者从集合、映射的观点出发。其近代定义是给定一个数集A,假设其中的元素为x,对A中的元素x施加对应法则f,记作f(x),得到另一数集B,假设B中的元素为y,则y与x之间的等量关系可以用y=f(x)表示。函数概念含有三个要素:定义域A、值域C和对应法则f。

函数指针

函数指针是一种在C、C++、D语言、其他类 C 语言和Fortran2003中的指针。函数指针可以像一般函数一样,用于调用函数、传递参数。在如 C 这样的语言中,通过提供一个简单的选取、执行函数的方法,函数指针可以简化代码。函数指针只能指向具有特定特征的函数。因而所有被同一指针运用的函数必须具有相同的参数和返回类型。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。