今天,我们来通过反汇编看一下函数调用的过程(顺便学习下汇编),如下图,为一个函数调用的例子。主函数里面调用了test()函数。
![22762971c437fc8d372853930ebfddca.png](https://i-blog.csdnimg.cn/blog_migrate/2de9602afbd667e3bcc1e8ea7ee65b27.jpeg)
在X86环境下,进入调试模式,反汇编代码。然后我们从主函数看起,
![491affa8ce9c32809a84a936b4b785d7.png](https://i-blog.csdnimg.cn/blog_migrate/4a8f75210cd7fb8e0ef8dfccf7c5a74e.jpeg)
前面一些汇编代码都是编译器在调试模式下自动生成的调试信息代码,我们主要看画红线的两句代码。哦,首先要看一下此时的栈空间状况,此时的栈空间由EBP和ESP两个寄存器来决定,EBP是栈底的内存地址,ESP是栈顶的内存地址。看一下吧。
![59c40fa5efb783ca272873e359b91ffb.png](https://i-blog.csdnimg.cn/blog_migrate/8a67c82636a7fc540874c62b6c52e426.jpeg)
此时可以画出这么一幅内存结构图。
今天,我们来通过反汇编看一下函数调用的过程(顺便学习下汇编),如下图,为一个函数调用的例子。主函数里面调用了test()函数。
在X86环境下,进入调试模式,反汇编代码。然后我们从主函数看起,
前面一些汇编代码都是编译器在调试模式下自动生成的调试信息代码,我们主要看画红线的两句代码。哦,首先要看一下此时的栈空间状况,此时的栈空间由EBP和ESP两个寄存器来决定,EBP是栈底的内存地址,ESP是栈顶的内存地址。看一下吧。
此时可以画出这么一幅内存结构图。