注册 登录
编程论坛 汇编论坛

dbgview监控窗体消息

bingghost 发布于 2013-01-05 21:44, 687 次点击
好久没有用Win32ASM  前来水一帖

大牛神们可以飞过了  因为本帖实在木有什么技术含量.....

1.首先运行dbgview
只有本站会员才能查看附件,请 登录

win7下请以管理员权限运行

2.将红色的地方勾住
只有本站会员才能查看附件,请 登录


3.请在您的窗体程序包含DebugMsg.inc (待会在下面以附件的形式给出)
这样您可以调用下面这2个函数了
只有本站会员才能查看附件,请 登录


4.在您的窗口的回调函数中插入如下代码
只有本站会员才能查看附件,请 登录


5.编译 链接 运行程序  在dbgvie观察..
只有本站会员才能查看附件,请 登录


只有本站会员才能查看附件,请 登录


6.其实DebugMsg.inc的实现很简单
只有本站会员才能查看附件,请 登录

查找  替换 列选择
然后写个函数查询即可.....

感谢您忍受想喷我的冲动  看完了此贴....

下楼发放附件....
8 回复
#2
信箱有效2013-01-05 21:46
不明觉厉
#3
bingghost2013-01-05 21:47
本楼发放上楼相关附件:

只有本站会员才能查看附件,请 登录
   工具

只有本站会员才能查看附件,请 登录
   Radasm测试工程

只有本站会员才能查看附件,请 登录
  上楼中提到的头文件

#4
bingghost2013-01-05 21:48
顺便把C版本发一下

只有本站会员才能查看附件,请 登录




发帖完毕....
#5
bingghost2013-01-05 21:50
以下是引用信箱有效在2013-1-5 21:46:29的发言:

不明觉厉
明白了 就感觉so easy了

主要是查找 替换弄的比较麻烦   纯属体力活
#6
yibana2013-02-11 21:14
刚好要用到 谢谢

;L宏-定义字符串常量
L macro var:VARARG                     
        LOCAL @lbl
        
    .const
        ifidni     <&var>,<"">
            @lbl db 0
        elseifidni    <&var>,<"",0ah>
            @lbl db 0ah,0
        else
            @lbl db var,0
        endif
        
    .code
       exitm <offset @lbl>
ENDM

顺遍问下  var前面为什么要加&
#7
水哥2013-02-13 09:19
程序代码:
_FindMessage proc uses esi ebx edx,uMsg:DWORD
  
  lea esi,lpDebugMsg
  
  xor edx,edx
  .while  edx < nNumOfDebugMsg
        
        mov eax,uMsg
        .if eax == dword ptr [esi]
            mov eax,edx
            ret
        .endif
        
        inc edx
        add esi,sizeof(DebugMsg)
  .endw
  
  mov eax,-1
  ret

_FindMessage endp

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;
功  能:打印当前消息
;
参  数:当前消息
;
返回值:无返回值
;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_PrintDebugMsg proc uses esi ebx edx,uMsg:DWORD
  
  invoke _FindMessage,uMsg

  .if eax != -1
    lea esi,lpDebugMsg
    mov ebx,sizeof(DebugMsg)
    mul ebx
    add esi,eax
    add esi,4
    invoke OutputDebugString,dword ptr [esi]
  .endif
  
  xor eax,eax
  ret
_PrintDebugMsg endp

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
程序代码:
/************************************************************************
*功  能:查找当前消息
*参  数:当前消息
*返回值:返回所在的索引
************************************************************************/
int FindMessage(UINT uMsg)
{
  int nIndex = 0;
  
  while (nIndex < MAX_MSG)
  {
    if (uMsg == g_stMonitorMessage[nIndex].m_nMessage)
    {
      return nIndex;
    }

    nIndex++;
  }

  return -1;
}

/************************************************************************
*功  能:打印当前消息
*参  数:当前消息
*返回值:无返回值
************************************************************************/
void PrinterMessage(UINT uMsg)
{
  int nIndex = FindMessage(uMsg);

  if (nIndex != -1)
  {
    OutputDebugString(g_stMonitorMessage[nIndex].m_lpMessage);
  }
}


这是小沙弥的代码的精华所在,把windows程序设计里的索引方式和OutputDebugString结合达到了自己想要的结果
,思路很好,只有想不到的,没有做不到的,继续努力
#8
水哥2013-02-13 09:25
还有老罗的例子有消息的例子,里面有消息的数组列表,自己一个一个写是够累的,复制就简单了
#9
bingghost2013-02-23 22:23
以下是引用yibana在2013-2-11 21:14:42的发言:

刚好要用到 谢谢
 
;L宏-定义字符串常量
L macro var:VARARG                     
        LOCAL @lbl
         
    .const
        ifidni     <&var>,<"">
            @lbl db 0
        elseifidni    <&var>,<"",0ah>
            @lbl db 0ah,0
        else
            @lbl db var,0
        endif
         
    .code
       exitm  
ENDM
 
顺遍问下  var前面为什么要加&
好久木有上论坛了
以前发的帖子 至于宏汇编的一些语法细节 俺由于很久木有用也忘记的差不多了
下面的帖子 有一些masm宏汇编不错的资料
https://bbs.bccn.net/thread-365657-1-1.html
https://bbs.bccn.net/thread-365666-1-1.html
您可以参考之。。。

另外这个L宏和网上流行的那个L宏写法不一样
是俺稍稍做了一点修改  好像可以支持
①.空字符L("")
②.多字符串L("Hello",0ah,0dh,"World",0ah,0dh)
甚至你为了代码的可读性  可以宏定义0ah,0dh
1