| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 772 人关注过本帖
标题:关于钩子的疑问!SOS
只看楼主 加入收藏
kofsos
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-5-5
结帖率:100%
收藏
 问题点数:0 回复次数:3 
关于钩子的疑问!SOS
SOS!为什么我的钩子重是跳不到他的子程序段!!钩子安装没错!但是跟踪的时候钩子安装完了就直接跳出DLL了根本不执行子程序编译OK但是运行没效果........
#include "stdafx.h"
#include "stdio.h"

typedef  BOOL (*YRDLL)();

typedef BOOL (*StopHook)();
int main(int argc, char* argv[])
{   
    BOOL k;
HMODULE HOOKDLL;

HWND H;
   
//键盘记录的一块
if(NULL!=(H=FindWindow(0,"QQ"))){
  if(NULL==(HOOKDLL=LoadLibrary("yr.dll")
   )){
   printf("DLL载入内存出错\n");//测试用
   Sleep(10000);
   return 0;
  }
  //导出函数导出地址
  StartHook HOOKMAIN=(StartHook)GetProcAddress(HOOKDLL,"StartHook");
  StopHook deldll=(StopHook)GetProcAddress(HOOKDLL,"StopHook");
  
  if(NULL==HOOKMAIN){
   printf("导出函数导出地址出错!\n");//测试用
   Sleep(1000);
   return 0;
  }
  //调用钩子函数
  k=HOOKMAIN();
  if(false==k){
   printf("DLL安装出错!\n");
   deldll();
   Sleep(10000);
   return 0;
  }
  for(;;)
  {
  Sleep(10000);
  }
}

return 0;
}
小弟初学请大侠解惑!大哥们我弄了2天了......

[[it] 本帖最后由 kofsos 于 2008-9-11 02:47 编辑 [/it]]
搜索更多相关主题的帖子: SOS 疑问 钩子 
2008-09-11 02:27
kofsos
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-5-5
收藏
得分:0 
以下是DLL部分中有保留!!!!
#include "stdafx.h"
#include <stdio.h>
HINSTANCE g_hInstance = NULL;
HHOOK  Kg_hHook = NULL;   
 

BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    //得到dll模块句柄
    g_hInstance = (HINSTANCE)hModule;
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        break;
    case DLL_THREAD_ATTACH:
        break;
    case DLL_PROCESS_DETACH:
    case DLL_THREAD_DETACH:
        if (Kg_hHook != NULL) UnhookWindowsHookEx(Kg_hHook);
        break;
    }
    return TRUE;
}

//钩子子程
LRESULT CALLBACK KeyHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if(nCode < 0 )
        return CallNextHookEx(Kg_hHook, nCode, wParam, lParam);
    //(中间为功能部分不能执行...)
    return CallNextHookEx(Kg_hHook, nCode, wParam, lParam);
}


BOOL StartHook()
{
    if (Kg_hHook!=NULL)
        return FALSE;
    //安装钩子
    Kg_hHook = SetWindowsHookEx(WH_GETMESSAGE, KeyHookProc, g_hInstance, NULL);
    return TRUE;  //跟到这里时就直接回main了没有去KeyHookProc郁闷!我还是不理解是怎么调用怎么调用钩子子程的..
}



BOOL StopHook()
{
    if (Kg_hHook != NULL)
    {
        if(!UnhookWindowsHookEx(Kg_hHook))
            return FALSE;
        Kg_hHook = NULL;
    }
    return TRUE;
}
大哥些帮帮忙....
.......
睡觉先..希望起来有人帮忙....

[[it] 本帖最后由 kofsos 于 2008-9-11 02:57 编辑 [/it]]
2008-09-11 02:33
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
你在Proc里面第一行放个写日志的,看看有没有日志生成。
如果有,就是你那个nCode<0的问题了。

如果没有,在Start和Stop这个地方中断,检查所有的变量的值。

VC是可以跨DLL调试的。

要学会自己Debug。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-09-11 10:17
kofsos
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-5-5
收藏
得分:0 
可以执行了 !我把原来的DLL换了就OK了!
但是我还有个疑问!为什么子程里面的代码我中断不了但是可以执行了????
2008-09-11 13:52
快速回复:关于钩子的疑问!SOS
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016231 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved