我是一朵浮云 发表于 2015-8-2 16:19

关于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加载的函数里面。

T_MAC仔 发表于 2015-8-3 13:05

具体用法百度不是都有吗   

0x18c0 发表于 2015-8-4 09:47

本帖最后由 0x18c0 于 2015-8-4 15:48 编辑

每个进程的地址空间都是独立的,虽然物理内存里大家都是共用同一个dll,但实际上只是共用dll的代码,默认变量不会共享
如果非要用dll共享变量也可以实现,可以参考这篇文章http://blog.csdn.net/morewindows/article/details/6702342


sunnysab 发表于 2015-8-4 15:12

使用配置文件实现?
终于有发VC的帖子了,好想哭,快被易语言刷屏了

我是一朵浮云 发表于 2015-8-5 23:12

sunnysab 发表于 2015-8-4 15:12
使用配置文件实现?
终于有发VC的帖子了,好想哭,快被易语言刷屏了

喜欢VC- =

浙江螃蟹 发表于 2015-8-5 23:19

本帖最后由 浙江螃蟹 于 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]
查看完整版本: 关于SetWindowsHookEx的一个小疑惑,在线等大神