函数调用过程-汇编代码分析
来源:互联网 发布:王天一网络象棋直播 编辑:程序博客网 时间:2024/05/22 00:34
软件平台:code::block+Mingw
C源码
main.c
int add(int a,int b);void print();int main(){ int a=0; a=add(1,2) print(); return 0;}int add(int a,int b){ return a+b;}void print(){ int a=0;}
汇编代码
main() 主要汇编代码
0x0040131A movl $0x0,-0x4(%ebp)0x00401321 movl $0x2,0x4(%esp)0x00401329 movl $0x1,(%esp)0x00401330 call 0x401344 <add>0x00401335 mov %eax,-0x4(%ebp)0x00401338 call 0x40134f <print>0x0040133D mov $0x0,%eax0x00401342 leave0x00401343 ret
int add(int a,int b):汇编代码
0x00401344 push %ebp0x00401345 mov %esp,%ebp0x00401347 mov 0xc(%ebp),%eax0x0040134A add 0x8(%ebp),%eax0x0040134D pop %ebp0x0040134E ret
void print():汇编代码
0x0040134F push %ebp0x00401350 mov %esp,%ebp0x00401352 sub $0x4,%esp0x00401355 movl $0x0,-0x4(%ebp)0x0040135C leave0x0040135D ret
关键汇编代码
(1)call addr ;命令相当于 push eip ;jmp addr;
将当前eip保存到栈中,跳转到目的地址
(2)push %ebp;mov %esp,%ebp;
函数开头固定格式,将栈底指针保存到栈中,再把栈底指针设置为当前栈顶指针
(3)leave ;相当于pop %ebp;
函数结束后,还原栈顶指针,void返回值类型函数 用leave;
int返回值类型函数 用pop %ebp;
(4)ret;相当于 pop %eip;
函数返回到原函数继续执行
0 0
- 函数调用过程-汇编代码分析
- 汇编代码 调用函数过程
- c语言内部(汇编代码分析)函数调用过程探究
- 函数调用汇编代码分析
- 函数调用过程(反汇编分析)
- C函数调用过程及汇编分析
- 反汇编代码分析--函数调用
- C++反汇编代码分析--函数调用
- C++反汇编代码分析--函数调用
- C++反汇编代码分析--函数调用
- C++反汇编代码分析--函数调用
- 反汇编代码分析--函数调用
- C++反汇编代码分析--函数调用
- C++反汇编代码分析--函数调用
- 通过反汇编来分析简单函数调用过程(***)
- VC++函数调用过程汇编分析(基于vs2012)
- 汇编学习笔记:函数调用过程中的堆栈分析
- IDA 汇编命令分析以及函数调用过程
- JS基础之数组,字符串等的操作
- Android中用Spannable在TextView中给文字加上边框
- 华为OJ——字符串加解密
- VR_Unity的基本Shader的剔除、深度测试、Alpha测试以及基本雾效
- getsockopt()与setsockopt()函数 测试代码
- 函数调用过程-汇编代码分析
- 我的记事本
- 45个免费LOGO在线制作网站
- 1966: [Ahoi2005]VIRUS 病毒检测
- python实现8大排序算法
- Android中用Spannable在TextView中设置超链接、颜色、字体
- CORS解决ajax跨域访问问题
- HDU 2289 Cup
- ExpandableListView 手风琴 效果