天天挂茶馆

挂茶馆易语言论坛

 找回密码
 立即注册
搜索
热搜: C++
查看: 2696|回复: 0

用OD手动查找窗口过程函数(classProc)

[复制链接]
  • TA的每日心情
    难过
    2 小时前
  • 签到天数: 246 天

    [LV.8]以坛为家I

    181

    主题

    598

    帖子

    39万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    395160
    QQ
    发表于 2018-10-4 21:51:13 | 显示全部楼层 |阅读模式
    有时候我们用OD查找窗口的classProc地址是不正确的,这时候可以用如下方法手动查找

    1. 用OD打开被调试程序
        打开 插件->API断点设置工具->常用断点设置,把CreateWindow的三个函数勾上,确定
       
    2. 按F9让程序运行并在断点停下,直到在堆栈窗口观察到你要的窗口名字(本文以“计算器”为例)



    3. 一路F8执行直到回到调用CreateWindowExW的代码段,并在附近找到pWndClassEx,可发现pWndClassEx的值存放在eax中,下面的RegisterClassExW就是利用pWndClassEx把窗口过程函数和窗口绑定起来的


    4. 我们把断点设置在push eax这行并清空其他断点,重新运行程序到断点处,在命令行键入db eax可以查找到pWndClassEx的数据,我们用MSDN查找
    pWndClassEx的数据结构如下图,可以发现窗口过程函数保存在lpfnWndProc变量中,即第三个DWORD数据

    从数据窗口可以看到pWndClassEx的数据,以我查到的结果为例,窗口过程函数的地址应为0x00731EDE(这里要注意,低字节在右边)



    5. Ctrl+G 键入0x00731EDE我们就可以跳转到窗口过程函数的代码啦~

    ---------------------本文来自 小明湖畔 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u010497228 ... 045?utm_source=copy
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版| 蜀ICP备15031375号 川公网安备51030402000199号

    GMT+8, 2025-5-9 12:58 , Processed in 0.157375 second(s), 8 queries , File On.

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表