上面的代码很简单,进入main后定义了一个变量a,然后将foo函数的返回值给b,返回。
首先看最上面两行!
push ebp
mov ebp, esp
这两句咋理解?很简单,首先将ebp寄存器中内容(栈内存基址)压栈保护起来,此时esp内容应该会变换,这个学过数据结构栈那一章的应该都知道的哈~
由于栈向下生长,那么esp的值会减去4个字节用来存放原来的ebp
因为已经保护好ebp原来的内容了,那么接下来把esp的值放进ebp中后ebp里就是栈顶地址啦~
接下来sub esp 48h,这句很好理解吧,把esp减去48。这句话的作用就是开辟了一块48h大小的栈内存,我们所用的临时变量啥的都在这里面啦
接下来的三个push跟第一句push作用一样,就是把三个寄存器压栈保护
然后401069 - 401076这四行指令的作用就是将刚刚开辟的内存每个字节初始化为0xcc(现在大家知道为啥调试vc的时候看到那么多cc了吧)
好了,到这一步准备工作就做完啦!