hook访问dll全局变量的问题

wang28103 2011-05-30 11:42:02
大家好!我用vc++ 6.0做了一个程序,用hook拦截其他进程的鼠标消息。在当前进程中调用一个dll中的setHook函数(自定义的),在setHook函数中用setwindowshookex安装钩子过程,并设置了几个dll中的全局变量。但我在实验中发现,在钩子过程中使用dll的全局变量时,其值仍然是初始化的值,并没有变为setHook中设置的值。
我在孙鑫的视频中看到他的hook程序,貌似我的程序和他的没什么区别,但他的却可以使用全局变量。我在自己机子上实验,发现只有hook钩子无法使用全局变量,而普通的函数,比如我再导出一个test函数,在test中是可以使用dll全局变量的。
请问这是什么原因导致的呢?钩子过程调用dll中的函数时会重新加载dll,重新初始化dll的全局变量吗? 请知道的朋友赐教,不胜感激!
...全文
63 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wang28103 2011-05-30
  • 打赏
  • 举报
回复
在网上查了相关资料,发现win32中,dll中的所有对象都归调用它的进程所有。当进程在载入DLL时,操作系统自动把DLL地址映射到该进程的私有空间,并复制一份该dll的全局数据到该进程空间。也就是说每个进程所拥有的相同的DLL的全局数据,它们的名称相同,但其值却并不一定是相同的,而且是互不干涉的。
在我的试验中,我用#pragma data_seg预处理命令设置了共享数据段,从而解决了mouse Hook的数据共享问题。但当我再设置一个键盘Hook的时候,发现只有全局的键盘Hook才能访问dll中的数据,注入到另一个线程的WH_KEYBOARD Hook子程无法访问dll中的全局数据,无论是否设置了共享数据段。请问这时为什么呢?
还有一个问题,当我在键盘Hook子程中开始另一个进程时,我发现会连续打开两个进程,不知道是哪里出了问题。
代码稍后传上。请高手赐教,多谢!

9,506

社区成员

发帖
与我相关
我的任务
社区描述
Windows专区 安全技术/病毒
社区管理员
  • 安全技术/病毒社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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