windows程序设计(1)

 

经典之作,要啃一下了。

慢慢来。

先附上第一个小程序的反汇编代码,从底层理解win32api

9:    #include <windows.h>
10:
11:   int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
12:
13:                      PSTR szCmdLine, int iCmdShow)
14:
15:   {
00401010   push        ebp
00401011   mov         ebp,esp
00401013   sub         esp,40h   // vc++程序典型汇编代码,esp-40h开辟局部变量空间
00401016   push        ebx         
00401017   push        esi
00401018   push        edi         //保护现场
00401019   lea         edi,[ebp-40h]   //edi用来根据偏移量访问局部变量及参数
0040101C   mov         ecx,10h        //
00401021   mov         eax,0CCCCCCCCh  //填充cc作为缓冲区溢出标志???
00401026   rep stos    dword ptr [edi] 
16:
17:   MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0);
00401028   mov         esi,esp   //esi指向栈顶
0040102A   push        0   //传参,默认遵从__cdecl调用规则
0040102C   push        offset string "HelloMsg" (00422034)  //传第三个参数
00401031   push        offset string "Hello, Windows 98!" (0042201c)  //传第二个参数
00401036   push        0       //第一个
00401038   call        dword ptr [__imp__MessageBoxA@16 (0042a2ac)]   //取iat表中的函数地址,调用。
0040103E   cmp         esi,esp   //
00401040   call        __chkesp (00401080) //用于检测堆栈是否被破坏,只在调试阶段存在,发行版本不存在。
18:
19:   return 0 ;
00401045   xor         eax,eax   //eax置0
20:
21:   }
00401047   pop         edi
00401048   pop         esi
00401049   pop         ebx     //恢复现场
0040104A   add         esp,40h    //手动恢复堆栈平衡
0040104D   cmp         ebp,esp
0040104F   call        __chkesp (00401080)  //对战是否破坏
00401054   mov         esp,ebp  
00401056   pop         ebp
00401057   ret         10h     //返回

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值