aardio 文档

process.apiHook 库模块帮助文档

process 成员列表

process.apiHook

在外部32位进程内安装 API 函数钩子,
作用仅仅是安装,需要要用 C,或 C++ 写 32位 dll 钩子。
可以在 aardio 中通过远程 API 调用钩子 DLL 中的函数。
具体用法可参考 process.ruffle 扩展库源码。

进程内钩子请改用 thread.apiHook,
线程内钩子请改用 raw.apiHook

创建 API Hook 工具

process.apiHook()

返回对象:processApihookObject

process.apiHook(执行文件,命令行参数,{suspended=true})

运行执行文件或关联文档,并返回 API Hook 安装工具。
启动后暂停进程,可在安装钩子以后调用 resume() 函数继续运行进程

process.apiHook(执行文件,命令行参数,启动参数)

运行执行文件或关联文档,并返回 API Hook 安装工具。
也可以仅指定第二个参数运行纯命令行
启动参数为 process.STARTUPINFO 结构体,可选,
可以使用普通table对象替代启动参数.将自动转换为STARTUPINFO结构体

process.apiHook(进程ID)

使用进程 ID 打开进程,并返回 API Hook 安装工具。
失败则返回 null,以及错误信息.

processApihookObject 成员列表

processApihookObject.freeLibrary(模块地址)

卸载DLL

processApihookObject.getProcAddress(模块地址,"API函数名")

查找外部进程API函数,返回函数地址

processApihookObject.install("拦截DLL模块名","拦截API函数名","钩子模块名","钩子API函数名")

安装钩子,返回HookInfo对象
也可以直接写拦截函数地址或钩子函数地址,
但函数地址必须是目标进程内的函数地址,不可使用aardio函数,

注意是在目标进程内调用LoadLibrary搜索DLL,
默认搜索路径包含目标EXE所在目录,而非当前EXE所在目录
但以斜杠开头的路径aardio会在当前进程中解析为完整路径

processApihookObject.install()

返回对象:procssHookInfoObject

processApihookObject.loadLibrary("DLL模块名")

在目标进程中加载DLL,返回数值类型句柄

processApihookObject.process

进程对象,

返回对象:processObject

processApihookObject.resume()

继续运行进程

processApihookObject.unInstall(HookInfo)

卸载钩子,
传入参数必须是 install函数的返回值

要注意的问题:
1、如果钩子函数正在回调中卸载自身会导致目标进程崩溃,
1、卸载钩子时目标函数不能正在使用中,
aardio会先暂停目标进程主线程,卸载完再恢复,
但目标进程可能是多线程的,请避免目标函数正在被调用时去释放

processApihookObject.unInstallAll()

释放所有钩子,
该函数会在对象回收时自动调用
如果不希望在进程关闭时卸载钩子,请将此函数赋值为null

procssHookInfoObject 成员列表

procssHookInfoObject.addrHookFunction

钩子函数地址

procssHookInfoObject.addrProtect

函数内存保护属性

procssHookInfoObject.addrTargetFunction

被拦截函数地址

procssHookInfoObject.addrTrampoline

用于调用原函数的跳板地址

procssHookInfoObject.hHookModule

钩子模块地址

procssHookInfoObject.hModule

被拦截模块地址

procssHookInfoObject.restoreOpCodeSize

安装钩子覆盖指令长度

Markdown 格式