【发布时间】:2012-05-18 11:45:01
【问题描述】:
我正在实现一个小的监控应用程序,所以我正在挂钩 CreateWindowExA/W 进程,所以我可以控制窗口的创建。 我用来挂钩的方法是用汇编程序 JMP 指令将调用中的前 5 个字节替换为我的挂钩函数。 (是的,我知道汇编程序,我以前多次使用过相同的方法)。 我在挂钩代码的开头使用 EnterCriticalSection 并使用 InterlockedExchange 来恢复被盗字节,也就是将我在 CreateWindowExA/W 开头写的 JMP 替换为真正的 5 个字节,这样我就可以正确调用该函数。根据我的经验,一切都必须没问题,但是当我刚刚用真实字节替换 JMP 时,其他一些线程调用了该函数,看起来字节也被替换了...... .
我知道我可以使用 IAT/EAT 表挂钩,但我想知道我当前的方法有什么问题... 可能 InterlockedExchange 不起作用的问题是,CreateWindowExA/W 是从 dll 的(comctl32.dll,shell32.dll...) 调用的,而不是主可执行模块。
希望有人帮助我,如果你不明白我的解释,请询问,我会重新解释。
【问题讨论】:
标签: c++ windows winapi assembly hook