使用.msstyles皮肤文件美化MFC程序

//asm source code note 1.1
//空的main函数(debug版)对应的asm代码

7:    int main(int argc, char* argv[])
8:    {
00401010   push        ebp                        //保存ebp, 要用ebp来保存栈顶, esp -= 4
00401011   mov         ebp,esp                  //用ebp保存栈顶, ebp在本程序执行时, 从来没有变过.

00401013   sub          esp,40h                  //开辟0x40长度的临时变量空间

                                                                 //保存要用到的3个寄存器
00401016   push        ebx                         //esp -= 4
00401017   push        esi                          //esp -= 4
00401018   push        edi                          //esp -= 4

00401019   lea         edi,[ebp-40h]           //用0xcc填充开辟出的0x40长度的临时变量空间
0040101C   mov         ecx,10h                  //开辟出的临时变量空间是0x40 = 需要填充DWORD(4字节) * 0x10次
00401021   mov         eax,0CCCCCCCCh  //填充的内容是0xcccccccc
00401026   rep stos    dword ptr [edi]     //(edi = ebp-40h) => (edi = ebp), 这样把从栈顶开辟的0x40变量空间都填充了
9:        return 0;
00401028   xor         eax,eax                    //返回值为0, 恒在eax中
10:   }
                                                                  //按顺序弹出保存的3个寄存器
0040102A   pop         edi
0040102B   pop         esi                            //esi 没有用到
0040102C   pop         ebx                          //ebx 没有用到

0040102D   mov         esp,ebp                  //恢复栈顶, ebp在本程序执行时, 从来没有变过, 所以直接赋给esp, 用来恢复栈顶
0040102F   pop         ebp                          //恢复ebp
00401030   ret

 

//通用寄存器功能说明
eax 累加器
ebx 基地址寄存器, 可作为存储器指针
ecx 计数寄存器, 来控制循环次数
edx 数据寄存器
ESI 变址寄存器, 存放存储单元在段内的偏移量
EDI 变址寄存器, 存放存储单元在段内的偏移量
EBP 指针寄存器, 用于访问堆栈内的存储单元, 存取堆栈中的数据
ESP 指针寄存器, 用于访问堆栈内的存储单元, 只可访问栈顶
EIP 指令指针寄存器, 存放下次将要执行的指令在代码段的偏移量

 

//堆栈地址变化说明
//栈顶地址addr, 栈底是addr - xx

//栈底方向
0013FF40  44 2E 42 00 83 00 00 00 D8 3D 03 00 D8 35 03 00  D.B......=...5..
0013FF50  D8 3D 03 00 74 FF 13 00 95 C6 40 00 00 02 00 00  .=..t...暺@.....
0013FF60  00 08 00 00 02 00 00 00 44 2E 42 00 83 00 00 00  ........D.B.....
0013FF70  03 00 00 00 7C FF 13 00 88 13 40 00 8C FF 13 00  ....|.....@.....
0013FF80  C0 FF 13 00 29 11 40 00 01 00 00 00 00 18 03 00  ....).@.........
0013FF90  78 18 03 00 00 00 00 00 00 00 00 00 00 B0 FD 7F  x............褒.
//栈顶方向

//push esp -= 4, 向栈底靠拢
//pop  esp += 4, 向栈顶靠拢

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值