peekmessagew

场景:HOOK PeekMessageW咋就这么费劲呢.解决方案

HOOK PeekMessageW咋就这么费劲呢......
我想hook PeekMessageW,刚开始用的是把开头的5字节改成 jmp xxxxxx 的形式,然后进入我的函数之后我再把这5个字节还原,调用PeekMessageW,调用完成之后再把这5个字节改成jmp xxxxxx。 但是这样不是很稳定,hook好了过一两分钟程序就未响应了,我怀疑可能是PeekMessageW调用的频率高,总改5个字节会出问题。

之后我又查了查,采用改7个字节的那种办法,也就是把api上面的5个nop改成一个长跳,然后把api开头的mov edi,edi改成一个短跳,跳到上面的长跳处,这样我执行原版api的时候就直接把原来的指针+2就行了,结果是改写前5个nop的时候正常,改写mov edi,edi的时候程序就未响应了

我不甘心...又试了试用detours,结果一样的...直接就未响应了...

我怀疑是不是因为我的测试程序用的是unicode,PeekMessageW调用频率太高了造成的,就把所有的PeekMessage后面加了个A,测试...依然未响应...不甘心,把Hook PeekMessageW改成hook PeekMessageA,程序里依然用的是PeekMessageA,测试,通过

总结一下目前的情况:
程序用PeekMessageW,Hook PeekMessageW失败,Hook PeekMessageA成功
程序用PeekMessageA,Hook PeekMessageW失败,Hook PeekMessageA成功...我就奇怪了...根本就用不到PeekMessageW,咋也未响应呢

求高人指点...

------解决方案--------------------
把Hook代码直接放“测试程序就是直接新建的mfc单文档程序”中。这样调试方便。不用注入(不需要dll)。
------解决方案--------------------
不要用debug版