首页
社区
课程
招聘
[旧帖] [求助]新手问一个汇编代码的问题. 0.00雪花
发表于: 2008-8-4 11:42 3114

[旧帖] [求助]新手问一个汇编代码的问题. 0.00雪花

2008-8-4 11:42
3114
我用VC做了个对话框程序.在里面加了一个button,和一个自己的小函数.

代码如下,很简单的:

void CAbDlg::OnButton1()
{       
    mybeep();
}

int mybeep()
{
    Beep(200,200);
    return 200;
}

然后我用OD断在系统Beep()上,跟踪到这两段asm代码:

/**********第一段***************/
00401CE0 >  55              push    ebp
00401CE1    8BEC            mov     ebp, esp
00401CE3    83EC 40         sub     esp, 40
00401CE6    53              push    ebx
00401CE7    56              push    esi
00401CE8    57              push    edi
00401CE9    8D7D C0         lea     edi, dword ptr [ebp-40]
00401CEC    B9 10000000     mov     ecx, 10
00401CF1    B8 CCCCCCCC     mov     eax, CCCCCCCC
00401CF6    F3:AB           rep     stos dword ptr es:[edi]
00401CF8    8BF4            mov     esi, esp
00401CFA    68 C8000000     push    0C8
00401CFF    68 C8000000     push    0C8
00401D04    FF15 C4734100   call    dword ptr [<&KERNEL32.Beep>]     ; kernel32.Beep
00401D0A    3BF4            cmp     esi, esp
00401D0C    E8 93020000     call    _chkesp                          ; jmp 到 MSVCRTD._chkesp
00401D11    B8 C8000000     mov     eax, 0C8
00401D16    5F              pop     edi
00401D17    5E              pop     esi
00401D18    5B              pop     ebx
00401D19    83C4 40         add     esp, 40
00401D1C    3BEC            cmp     ebp, esp
00401D1E    E8 81020000     call    _chkesp                          ; jmp 到 MSVCRTD._chkesp
00401D23    8BE5            mov     esp, ebp
00401D25    5D              pop     ebp
00401D26    C3              retn

/**********第二段asm代码***************/
00401C90 >  55              push    ebp
00401C91    8BEC            mov     ebp, esp
00401C93    83EC 44         sub     esp, 44
00401C96    53              push    ebx
00401C97    56              push    esi
00401C98    57              push    edi
00401C99    51              push    ecx
00401C9A    8D7D BC         lea     edi, dword ptr [ebp-44]
00401C9D    B9 11000000     mov     ecx, 11
00401CA2    B8 CCCCCCCC     mov     eax, CCCCCCCC
00401CA7    F3:AB           rep     stos dword ptr es:[edi]
00401CA9    59              pop     ecx
00401CAA    894D FC         mov     dword ptr [ebp-4], ecx
00401CAD    E8 DAF3FFFF     call    0040108C
00401CB2    5F              pop     edi                              ; 0012F940
00401CB3    5E              pop     esi
00401CB4    5B              pop     ebx
00401CB5    83C4 44         add     esp, 44
00401CB8    3BEC            cmp     ebp, esp
00401CBA    E8 E5020000     call    _chkesp                          ; jmp 到 MSVCRTD._chkesp
00401CBF    8BE5            mov     esp, ebp
00401CC1    5D              pop     ebp

我想第一段就对应了如下函数
int mybeep()
{
    Beep(200,200);
    return 200;
}

而第二段就对应了如下函数
void CAbDlg::OnButton1()
{       
    mybeep();
}

我的问题是:
第二段asm代码我不清楚每一句的含义或作用.

希望您帮我翻译一下.
00401C90 >  55              push    ebp  ;保存ebp
00401C91    8BEC            mov     ebp, esp ;取堆栈入口地址
00401C93    83EC 44         sub     esp, 44 ;堆栈中增加44个空间
......

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 371
活跃值: (67)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
2
1.尝试使用ida pro反汇编,注意使用static link.因为ida pro可以提供不少的方便.
2.尝试dig into mfc sourcecode.因为mfc是一个framework,抽象了很多层,可以查看vc目录下mfc\include里边的源码来看一下执行过程,然后再进行对比.
===
message===>wndproc===>search for message handler(include the derived highest class[your class]-->base class(ie.CFrameWnd)--->CWnd).
2008-8-5 00:11
0
游客
登录 | 注册 方可回帖
返回
//