首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

这种API挂钩法为什么有不可解决的线程同步有关问题

2012-03-09 
这种API挂钩法为什么有不可解决的线程同步问题2.挂钩过程(1 )在内存中寻址要挂钩的 API 函数。(2 )保存这个

这种API挂钩法为什么有不可解决的线程同步问题
2.挂钩过程 
(1 )在内存中寻址要挂钩的 API 函数。 
(2 )保存这个函数的前 8 字节。 
(3 )使用上面构建的机器码重写这个函数的前 8 字节。自定义函数必须和挂钩的函数有
完全相同的签名:所有的参数必须相同,返回值必须相同,调用规则必须相同。 
(4 )现在,当一个线程调用这个挂钩函数时,JUMP 指令会跳转到自定义的函数。这个
时候可以执行任何代码。 
(5 )恢复在第 2 步保存的字节,将它们放回挂钩函数开头,以便取消挂钩。 
(6 )调用这个被挂钩的函数(此时挂钩已经取消),此函数正常执行。 
(7 )当原来的函数返回时,执行第 2 和第3 步,再次挂钩这个 API,以便自定义的函数
在未来会被调用。 
显然,上述过程有着不可解决的线程同步问题,但是这种方法对挂钩单线程使用的API
还是相当有效的。 

“上述过程有着不可解决的线程同步问题”这句话不理解,怎么就有这个问题了

[解决办法]
这个不会,改对齐的4字节可以做成原子操作
就算这里不能一次完成也不要紧,因为这个修改只用作一次,你楼顶说的覆盖每次调用都得做

热点排行