52ky 发表于 2023-9-10 00:30:01

易语言源码实现多线程安全Hook

该模块包含一组少量编程中常用的函数:

获取变量堆栈指针,A2W,W2A,Call(任意数量的参数,内部会维护堆栈平衡),获取函数的真实地址(可以是Naked函数,需要自己维护堆栈平衡),和一些堆函数;

还有两个比较特别的:

一种是SDK_OBJ中设置的函数,允许用户通过This控制类,包括读写成员、调用方法、设置对象实例

二十个SDJ_InlineHook,翻遍了很多论坛的代码,都是直接jmp,然后在调用原来函数的时候临时恢复调用。

这种方法有一个隐患,就是在多线程中,如果一个线程挂起Hook,而这个函数恰好被另一个线程调用,那么那个线程就调用了原来的函数!没有上瘾。

我使用的方法是写jmp。调用原函数时,将原函数的前几行代码复制到内存中,并添加jmp。这样可以保证多线程下的安全。

另外,这个Hook采用了链表机制,可以按照随机顺序卸载。



页: [1]
查看完整版本: 易语言源码实现多线程安全Hook