|
用过VC的人我想应该大部分都听说过甚至用过大名鼎鼎的Detours库了吧,和易语言各个模块里的APIHOOK类相似,但是Detours功能肯定是秒杀这些模块的,长久以来易语言要进行API的HOOK都是用的下面这一套:改写函数头前5个字节跳到回调函数里,回调函数里进行一系列处理后如果还要再调用原来的API函数就要恢复函数头的前5个字节再调用,最后为了继续HOOK就要再次改写函数头5个字节继续跳到回调函数里(就是大家习惯写的“APIHOOK.安装() APIHOOK.暂停() APIHOOK.继续()”),这样一套下来效率极低,如果是调用频繁的函数,效率感人,例如网络游戏调用发包的send函数,一秒之内可能就要调用几十次,用以前常见的HOOK方式反复改写函数头,效率可想而知。当然这不是最主要的,最主要的是这一套不能用在多线程里啊,这种模式的APIHOOK用在多线程里崩的概率太大了,假如A线程运行到函数头停住,B线程接着运行然后改写了函数头,最后A线程回来继续运行的时候发现老家都被人改了,然后就不知道怎么继续往下运行了,不崩给你看崩给谁看。
因为我现在用VC比较多,所以一直用Detours用的挺好,以前也想过从头开发写一个易语言版的Detours,但是因为要用到反汇编模块,我熟悉的反汇编库是capston和beaengine,但是这样从头写要么带一个反汇编的dll要么带上反汇编的静态库,太累赘了就一直没有写,VC使用时用的是高版本的Detours,不适合改造成易语言的,前两天找了一下找到一个低版本的Detours刚好用来改造成易语言版本的最合适。今天晚上花了3个小时写了易语言的动态库和静态库,太久没写易语言的库生疏了,所以如果有什么BUG在帖子里留言,有时间我会修改,大家告别以前的HOOK方式拥抱这个效率高且支持多线程的库吧。
附件里是易语言动态库和静态库,还有一份测试的源码。各种图我就不放了,我懒。
Edetours.rar
(84.28 KB, 下载次数: 93)
|
评分
-
查看全部评分
|