GDB调试汇编堆栈过程分析

使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器:

使用gdb调试代码。

使用break main指令在main函数处设置断点,然后调试,直到mian函数处。

使用diassemble指令获取汇编代码

查看内存地址中的值,但目前%esp所指堆栈内容为0,%ebp所指内容也为0

使用命令display /i $pc每次程序中断后可以看到即将被执行的下一条汇编指令

call将下一条指令的所在地址(即当时程序计数器PC的内容)入栈

准备传参



查看f函数的汇编代码

g分配栈空间

pop %ebp指令将栈顶弹到%ebp中

ret返回g中call的调用位置

ret返回f中call的调用位置,结束f函数

主函数汇编代码

将%edx于%eax相加

ret结束main函数

指令 %eip %esp %ebp %eax 堆栈
push $0x8 0x804840b 0xffffd048 0xffffd048 0xf7fb8dbc 0x0
call 0x80483ef 0x804840d 0xffffd044 0xffffd048 0xf7fb8dbc 0x8 0x0
push %ebp 0x80483ef 0xffffd040 0xffffd048 0xf7fb8dbc 0x8048412 0x8 0x0
mov %esp,%ebp 0x80483f0 0xffffd03c 0xffffd048 0xf7fb8dbc
mov 0x804a01c,%edx 0x80483f2 0xffffd03c 0xffffd03c 0xf7fb8dbc 0xffffd048 0x8048412 0x8 0x0
mov 0x8(%ebp),%eax 0x80483f8 0xffffd03c 0xffffd03c 0xf7fb8dbc 0xffffd048 0x8048412 0x8 0x0
call 0x80483db 0x80483fe 0xffffd038 0xffffd03c 0xa 0xa 0xffffd048 0x8048412 0x8 0x0
push %ebp 0x80483db 0xffffd034 0xffffd03c 0xa 0x8048403 0xa 0xffffd048 0x8048412 0x8 0x0
mov %esp,%ebp 0x80483dc 0xffffd030 0xffffd03c 0xa 0xffffd03c 0x8048403 0xa 0xffffd048 0x8048412 0x8 0x0
ret 0x80483ee 0xffffd034 0xffffd03c 0xb 0x8048403 0xa 0xffffd048 0x8048412 0x8 0x0
leave 0x8048406 0xffffd03c 0xffffd03c 0xb 0xffffd048 0x8048412 0x8 0x0
ret 0x8048407 0xffffd040 0xffffd048 0xb 0x8048412 0x8 0x0
add $0x4,%esp 0x8048407 0xffffd040 0xffffd048 0xb 0x8 0x0
leave 0x804841c 0xffffd048 0xffffd048 0xe 0x0
ret 0x804841d 0xffffd04c 0x0 0xe

最新文章

  1. php上传图片文件常用的几个方法
  2. Django配置和初探
  3. centos 后台执行C#控制台程序
  4. treeview bootstrap 多级下拉树
  5. WCF服务显示的是服务器名称而不是IP地址...
  6. Spring 文章推荐
  7. android录像增加时间记录(源码里修改)
  8. java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.widget.TextView
  9. HDU 5086
  10. 从最简单的HelloWorld理解MVP模式
  11. JSP视频
  12. C语言中指针的指针是如何工作的?
  13. 【CSS学习笔记】CSS选择器
  14. 第十七篇 基于Bootstarp 仿京东多条件筛选插件的开发(展示下)
  15. 前端开发中一些好用的chrome插件总结
  16. Linux 套接字编程中的 5 个隐患(转)
  17. 在Docker中体验数据库之MySql
  18. 用C自撸apache简易模块,搭建图片处理服务器。
  19. commons-logging,log4j和jdklog的调用方式
  20. CSS------如何让div中的div处于右下角

热门文章

  1. 解决eclipse端口占用问题
  2. wps恢复经典模式
  3. 简单的SQL语句
  4. Mac Pro 8G 安装MyEclipse提示虚拟内存为0 安装失败
  5. jquery简单的轮播效果!
  6. DOCKER 为新启用的容器配置外网IP
  7. Java Graphics2D 画出文字描边效果
  8. Linux C编程学习之开发工具2---GDB调试器
  9. Python 实现隐藏文件夹、文件操作
  10. 基于ZooKeeper的分布式锁和队列