首页
社区
课程
招聘
请教个VB函数rtcmsgbox
发表于: 2005-2-27 19:20 7208

请教个VB函数rtcmsgbox

2005-2-27 19:20
7208
以前有人分析这个函数的时候列表如下:
;------------------------------------------------------
rtcMsgBox       ;函数 MsgBox

LEA EAX,DWORD PTR SS:[EBP-64]
LEA ECX,DWORD PTR SS:[EBP-54]
PUSH EAX                        ;参数5
LEA EDX,DWORD PTR SS:[EBP-34]
PUSH ECX                        ;参数4
PUSH EDX                        ;参数3
LEA EAX,DWORD PTR SS:[EBP-24]
PUSH ESI                        ;参数2
PUSH EAX                        ;参数1
CALL DWORD PTR DS:[<&MSVBVM60.#595>]; MSVBVM60.rtcMsgBox
                              ;结果在eax中返回

我调试一个程序, 也是看到上面的参数结构,但从压栈中的数据看不出上面的参数都是什么意义,谁能解释一下上面参数的意思吗?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
2
用TRW下断点中断到:00401A4A(rtcMsgBox)处。看看这时候堆栈里面的数据,我这里如下:
  Esp  :  63F938
  Esp+4  :  000000
  Esp+8  :  63F948
  Esp+C  :  63F958
  Esp+10  :  63F968
  Esp+14  :  378F24
    然后F10运行过去这个Call,会发现堆栈停在了Esp+14  : 378F24这个地方,说明上面的5个数据为函数的参数。当然,有时候不是这种情况,但是我们要坚信*的主流思想还是好滴。。。
    其中那个Esp+4应该是风格之类的,君不见对话框里面的风格都用什么0,1之流来表示么?把这个000000改为000001,对话框果真就变了个样子。其他几个63**应该是地址,因为对话框参数一般都是地址,用于指引caption 和 content。
    那么找到这几个地方看看,如下:
63F938:    0A 00 00 00 58 F9 63 00 - 04 00 02 80 2C 06 00 00
63F948:    0A 00 00 00 01 00 00 00 - 04 00 02 80 80 0F 51 00
63F958:    0A 00 00 00 00 00 00 00 - 04 00 02 80 E4 FA 63 00
63F968:    08 00 00 00 20 16 07 01 - C0 0F 51 00 01 10 00 00
    4个变量明显是4个结构体,目前还不清楚代表什么意思。追进rtcMsgBox,会发现这个函数的核心其实调用了User32里面的 MessageBoxIndirect 函数。而上面变量中63F970处为对话框中显示的字符串地址,就是“C0 0F 51 00”(读地址的时候为:00510FC0)。
    结构体里面数据是什么意思呢?或许里面有些数据对我们无所谓吧。抱着这样的心理,我一个一个在内存中把这些数据改为00,最后得到下面这个情况:

63F938:    0A 00 00 00 58 F9 63 00 - 04 00 02 80 00 00 00 00
63F948:    0A 00 00 00 00 00 00 00 - 04 00 02 80 00 00 00 00
63F958:    0A 00 00 00 00 00 00 00 - 04 00 02 80 00 00 00 00
63F968:    08 00 00 00 00 00 00 00 - C0 0F 51 00 00 00 00 00

    就是说上面那一堆数据可以用下面这些数据来代替。关键的地方也就是:63F970 处,用于指出字符串地址。
2005-2-27 19:23
0
雪    币: 5134
活跃值: (2583)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
3
谢谢nbw,就是堆栈中的数据把我弄蒙的,一点都不象普通的API函数的调用。

63F938:    0A 00 00 00 58 F9 63 00 - 04 00 02 80 2C 06 00 00
63F948:    0A 00 00 00 01 00 00 00 - 04 00 02 80 80 0F 51 00
63F958:    0A 00 00 00 00 00 00 00 - 04 00 02 80 E4 FA 63 00
63F968:    08 00 00 00 20 16 07 01 - C0 0F 51 00 01 10 00 00
2005-2-27 19:48
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
4
改改查查慢慢就明白了
2005-2-27 19:56
0
游客
登录 | 注册 方可回帖
返回