必备知识:
一文理解头文件与库文件 - 掘金 (juejin.cn)
一.API
所属计算机领域:计算机科学、软件工程、web开发等等
1.什么是API
1.含义
Application Programming Interface 应用程序编程接口
它是一组定义了软件系统如何相互操作的规则集合。
2.API的功能
①通过API,不同的软件可以互相通信、交换数据,实现功能的扩展和整合。
②开发人员可以利用API来访问特定软件或服务提供的功能和数据,而无需了解其内部工作原理。
③API可简化开发流程,加快产品上线速度,并促进不同系统之间的集成与交互。
注:这里所说的功能拓展,其实就是在开发层面对某些功能进行升级,例如你本来只会扫地,但是现在通过升级对应的API可以实现智能化扫地。
听起来像是开发语言中"函数"的功能,但API实际上与函数在表现形式上还是有所区别。
3.API的主要形式
- Web API(网络API) :Web API是通过网络提供服务的API,通常以HTTP协议为基础,使用REST(Representational State Transfer)或SOAP(Simple Object Access Protocol)等协议进行通信。它们允许不同的软件系统通过互联网相互通信和交换数据。
- 库API(Library API) :库API是针对特定编程语言或框架提供的API,开发人员可以在其应用程序中直接调用这些API来使用特定功能或实现特定操作。例如,Python的标准库提供了各种API,如文件操作、网络通信等。
- 操作系统API:操作系统API允许开发人员与操作系统进行交互,以执行诸如文件操作、内存管理、进程控制等操作。不同的操作系统提供了各自的API,如Windows提供的Win32 API、Linux提供的POSIX API等。
- 数据库API:数据库API允许开发人员通过编程语言与数据库进行交互,执行查询、插入、更新、删除等数据库操作。常见的数据库API包括Java的JDBC、Python的SQLite API等。
- 硬件API:硬件API允许开发人员与硬件设备进行交互,如打印机API、图形处理器API等,以控制硬件设备的行为或获取其状态信息。
这些API形式提供了开发人员与不同软件、服务、系统和硬件进行交互的途径,为应用程序的开发和集成提供了便利。
我们最容易接触到的就是库API,也就是一些依赖项(常以库文件的形式出现)
4.API与函数的区别
-
范围:
- API: API是一组规定了软件系统间如何通信和交互的规则集合。API可以包含多个函数、类、数据结构等,用于实现特定功能或服务的访问。可见,函数是其中之一的表现形式。
- 函数: 函数是程序中具体执行某项任务的代码块。函数通常只负责完成一个特定的操作,而API则通常涵盖更广泛的功能和交互。
-
用途:
- API: API通常用于定义软件系统的外部接口,允许其他软件或开发人员访问和利用系统提供的功能。它们有助于不同系统之间进行通信和数据交换。
- 函数: 函数主要用于封装和组织代码,实现特定的功能或操作。函数通常作为代码的模块化单元,可以重复调用以提高代码的可重用性和可维护性。
-
封装性:
- API: API可以包含多个函数、类、数据结构等,形成一个完整的接口,隐藏了系统内部的实现细节,向外部提供了一种标准化的访问方式。
- 函数: 函数在程序中封装了一段具体的操作代码,对外部代码暴露其输入参数、返回值等接口,但函数本身并不提供像API那样的全面接口。
总的来说,API是更广义的概念,指代系统或服务提供给外部使用者的接口规范;而函数是代码中的特定操作单元,用于实现具体功能。函数可以是API的组成部分,但API往往包含更多的元素和规范,用于与外部系统进行交互和通信。
二.HOOK API DLL技术
1.什么是HOOK API DLL技术
HOOK API DLL技术是指利用Windows操作系统提供的动态链接库(DLL)和API(应用程序编程接口)来实现钩子(Hook)功能的技术。
- 钩子是一种机制,允许应用程序
拦截并监视系统级别的事件或消息,以对其进行处理或修改。
2.HOOK API DLL技术实现步骤
具体来说,HOOK API DLL技术通常包括以下几个步骤:
- 编写DLL库:开发人员编写一个DLL库,其中包含了钩子函数的实现代码。钩子函数是用于拦截和处理特定事件或消息的函数。
- 注册钩子:在目标系统中,应用程序通过调用Windows API中的函数来注册特定类型的钩子。这些函数包括
SetWindowsHookEx等。 - 挂载钩子:注册钩子后,系统会在特定的事件或消息发生时调用DLL库中的钩子函数。这样,钩子函数就可以拦截并处理这些事件或消息。
- 处理事件:钩子函数在收到系统事件或消息时,可以执行特定的操作,如修改消息内容、阻止消息传递、记录事件信息等。
- 卸载钩子:当不再需要钩子功能时,应用程序可以调用相应的API函数来卸载注册的钩子,释放系统资源。
HOOK API DLL技术常用于实现各种系统级别的功能,如下:
- 键盘鼠标事件的监听
- 窗口消息的拦截
- 系统调用的跟踪
- 其他
但需要注意的是,滥用钩子技术可能会导致系统稳定性和安全性问题,因此在开发过程中需要谨慎使用,并遵循相关的安全规范和最佳实践。
3.API钩子的组成
API钩子通常由以下几个主要组成部分构成:
- 钩子过程(Hook Procedure) :钩子过程是一个回调函数,用于处理被拦截的事件或消息。当特定的事件发生时,操作系统会调用钩子过程来进行处理。钩子过程通常由开发人员编写,并通过DLL库加载到系统中。
- 钩子类型(Hook Type) :钩子类型定义了要拦截的事件或消息的类型。不同的钩子类型对应着不同的系统事件,如键盘输入、鼠标事件、窗口消息等。常见的钩子类型包括
-
键盘钩子(WH_KEYBOARD)
-
鼠标钩子(WH_MOUSE)
-
窗口过程钩子(WH_CALLWNDPROC)
-
- 钩子链(Hook Chain) :钩子链是指一系列已安装的钩子,按照特定的顺序组成链表结构。当事件发生时,系统会按照链表顺序依次调用每个钩子过程,直到某个钩子处理了该事件或消息为止。
- 安装和卸载函数(Install and Uninstall Functions) :安装函数用于将钩子过程添加到钩子链中,以开始拦截特定事件或消息。卸载函数则用于从钩子链中移除钩子过程,停止拦截事件或消息。常见的安装和卸载函数包括
SetWindowsHookEx和UnhookWindowsHookEx。 - 钩子数据结构(Hook Data Structure) :钩子数据结构包含了钩子过程需要的参数和信息,如事件类型、消息内容、事件发生的窗口句柄等。钩子过程通过这些数据来识别和处理特定的事件或消息。
通过以上组成部分,API钩子可以实现对系统级别事件和消息的拦截和处理,为开发人员提供了一种强大的扩展和控制系统行为的手段。