我在Hook一个调用频率极高的函数发生崩溃,于是看了MinHook的解决方案,用的是自旋锁,MH关键代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
于是我照搬自旋锁代码加到我的hook函数前后,问题解决。
我对于Hook多线程问题的理解如下:
在Hook多条指令时,如果环境是多核,有可能有部分指令还没有修改完成,此时有另一条线程来执行不完整或错误的指令,程序崩溃
我的疑惑在于:自旋锁仅仅保护用于Hook的函数同时仅被一个线程执行,但是这与被hook的位置无关,依然有可能发生指令修改了一半被其他线程执行的可能,所以我感觉这个自旋锁没有意义。当然肯定是我理解有问题,还请大家不吝赐教
还有一个疑惑,如果是单核环境,有没有一种可能,指令修改到一半时,线程切换,恰巧切换到另一条线程执行被hook位置,发生崩溃?