想做个小程序完成HOOK API 的功能, 看到<<WIN核心>>中讲的使用修改输入模块的方法, 说是不用担心多线程问题, 但是还是想不通, 如果在使用全局钩子将DLL注入时, 在ATTACH中对输入模块的某个函数地址进行修改, 这时如果当前进程中还有另一个线程要调用这个函数的话, 会不会因发错误呀? 

解决方案 »

  1.   

    地址是32位,也就是一个原子操作,也就是线程安全的。不可能写到一半就切换线程的。
      

  2.   

    多线程问题当然是要考虑的,不过因为地址表是按字长的整数倍对齐的,整个指针只需一次操作即可完整修改,不存在修改中途其它线程访问该指针的情况,所以不会在修改的时候出问题。
      

  3.   

    函数地址是指针类型,对它的操作对于操作系统来说是一个原子操作,它是一次完成的,所以不用担心互斥访问的问题。
      

  4.   

      这都可以!我真是笨到家了,连这个都没有想到,哇!!!!!!!!!!!!!!!!!!!,谢谢了,给分.