关于SetWindowsHookEx的一个小疑惑,在线等大神
最近在摆弄钩子的时候遇到一个这样的问题。我有一个DLL文件,里面有两个函数和一个全局变量如下所示
static int number=0;
HHOOK m_Hook = NULL;
LRESULT CALLBACK hookfunc(int nCode, WPARAM wParam, LPARAM lParam)
{
return CallNextHookEx(m_Hook, nCode, wParam, lParam);
}
__declspec(dllexport) void SetHook(int x)
{
number = x;
m_Hook = SetWindowsHookEx(WH_CBT, hookfunc, GetModuleHandle(L"me.dll"), 0);
}
我的注入器加载的时候就load了这个dll。
然后需要的时候就调用Sethook这个函数。同时将一个数字传递进去(这个数字是可变的)
我去查了一下核心编程,书上貌似是说把进程内存空间里面的DLL映射到另一个进程。
但是我测试的时候发现,number这个变量在注入以后是0,并不是我传递进去的数字。不知道有没有大神知道应该怎么做呢?(尽量不使用进程通信之类的方案,我想直接把我设定好的DLL复制到另外一个进程)
在线等大神。也拜托大神说明下问题的原因。
P.S:钩子函数里面没有执行任何功能,我写在了DLL加载的函数里面。
具体用法百度不是都有吗 本帖最后由 0x18c0 于 2015-8-4 15:48 编辑
每个进程的地址空间都是独立的,虽然物理内存里大家都是共用同一个dll,但实际上只是共用dll的代码,默认变量不会共享
如果非要用dll共享变量也可以实现,可以参考这篇文章http://blog.csdn.net/morewindows/article/details/6702342
使用配置文件实现?
终于有发VC的帖子了,好想哭,快被易语言刷屏了 sunnysab 发表于 2015-8-4 15:12
使用配置文件实现?
终于有发VC的帖子了,好想哭,快被易语言刷屏了
喜欢VC- = 本帖最后由 浙江螃蟹 于 2015-8-5 23:21 编辑
如果实在想实现这些数据在各进程中一样,就用数据段共享;
#pragma data_seg ("shareddata") //名称可以自己定义,但必须与下面的一致。
static int number=0;
HHOOK m_Hook = NULL;
#pragma data_seg()#pragma comment(linker, "/SECTION:shareddata,RWS")
页:
[1]