易语言源码实现多线程安全Hook
该模块包含一组少量编程中常用的函数:获取变量堆栈指针,A2W,W2A,Call(任意数量的参数,内部会维护堆栈平衡),获取函数的真实地址(可以是Naked函数,需要自己维护堆栈平衡),和一些堆函数;
还有两个比较特别的:
一种是SDK_OBJ中设置的函数,允许用户通过This控制类,包括读写成员、调用方法、设置对象实例
二十个SDJ_InlineHook,翻遍了很多论坛的代码,都是直接jmp,然后在调用原来函数的时候临时恢复调用。
这种方法有一个隐患,就是在多线程中,如果一个线程挂起Hook,而这个函数恰好被另一个线程调用,那么那个线程就调用了原来的函数!没有上瘾。
我使用的方法是写jmp。调用原函数时,将原函数的前几行代码复制到内存中,并添加jmp。这样可以保证多线程下的安全。
另外,这个Hook采用了链表机制,可以按照随机顺序卸载。
页:
[1]