如何避免API HOOK造成的程序崩溃

土豆吞噬者 2010-08-20 07:46:32
这几天仿照<<Delphi 下深入Windows 核心编程>>的例子写了一个监视文件的程序,有以下疑问,大家看下应该怎么解决?(用的是全局消息钩子注入的,API HOOK用的是改引入表实现的)
1.开始HOOK一点问题都没有,主要就是停止HOOK时候有问题,停止HOOK的时候,如果应用程序在调用被HOOK的API就会崩溃,错误报告指出是一个“未知的模块”出的错误。猜想是由于卸载dll的时候仅仅是恢复了引用表就退出了,而卸载dll和应用程序调用dll里的函数可能是同时进行的,所以会出错。那么如何等待应用程序不再调用我的“API函数”再退出呢?我有个想法是在我的“API函数”的开始Setevent,结束的时候resetevent,卸载dll那等待这个事件再退出,不知道可行不?一般是怎么做的?
2.消息钩子如果不停的“挂钩”和“取消钩子”会出问题吗?“挂钩”->“取消钩子”->“再次挂钩”,这里面“取消钩子”->“再次挂钩”之间应该等待所有应用程序卸载了dll再进行“再次挂钩”吗?
3.消息钩子注入dll的时候应用程序会发生什么事情?系统会开一个线程来加载dll还是挂起所有线程,等待加载dll完成再恢复所有线程?
4.如何安全卸载dll,保证卸载dll的时候应用程序不会调用dll里的函数,不会访问dll里的数据?
...全文
620 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
startbin 2010-09-10
  • 打赏
  • 举报
回复
如何解决的分享下好吗
土豆吞噬者 2010-08-24
  • 打赏
  • 举报
回复
自己解决了
鱼C缸 2010-08-23
  • 打赏
  • 举报
回复
来学习的
iqyely 2010-08-22
  • 打赏
  • 举报
回复
来学习下
土豆吞噬者 2010-08-21
  • 打赏
  • 举报
回复
楼上的 那个有啥用啊 汗
12rain 2010-08-21
  • 打赏
  • 举报
回复
最好在卸载钩子的时候,广播一条消息:
SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧