GDB调试例子的汇编堆栈

  • 代码
  • 直接-m32编译出现问题
  • 编译64位Linux版本32位的二进制文件,需要安装一个库,使用指令sudo apt-get install libc6-dev-i386
  • 编译成功,进入gdb调试界面
  • 在main处设置断点、运行并获取汇编代码查看各寄存器状态

  • 主函数栈基址为0xffffd104,值为0

  • call指令将下一条指令地址入栈,%esp、%ebp值发生变化

  • 上一个函数的基址入栈,从当前%esp开始作为新基址,原地址压栈保存

  • 为传参做准备

  • 实参计算在%eax中进行

  • f函数汇编代码

  • 实参入栈

  • call指令将下一条指令的地址入栈




  • 计算short+int

  • pop %ebp指令将栈顶弹到%ebp中,同时%esp增加4字节



  • ret指令将栈顶弹给%eip


堆栈情况

指令

%esp

%ebp

堆栈

movl$0x8,(%esp)

0ffffd104

0ffffd108

0x0

call 0x8048401

0ffffd100

0ffffd108

0x8 0x0

push %ebp

0ffffd100

0ffffd108

0x804842e 0x8 0x0

mov %esp,%ebp

0ffffd0fc

0ffffd108

0xffffd108 0x804842e 0x8 0x0

mov 0x804a01c,%edx///

0ffffcf6c

0ffffcf6c

0xffffcf78 0x804842e 0x8 0x0

call 0x80483ed

0ffffd0f8

0ffffd0fc

0xa 0xffffd108 0x804842e 0x8 0x0

push %ebp

0ffffd0f4

0ffffd0fc

0x804841a 0xa 0xffffd108 0x804842e 0x8 0x0

mov %esp,%ebp

0ffffd0f0

0ffffd0fc

0xffffd0fc 0x804841a 0xa 0xffffcd108 0x804842e 0x8 0x0

movzwl 0x804841a,%eax

0ffffd0f0

0ffffd0f0

0xffffd0fc 0x804841a 0xa 0xffffcd108 0x804842e 0x8 0x0

ret

0ffffd0f4

0xffffd0fc

0x804841a 0xa 0xffffcd108 0x804842e 0x8 0x0

leave

0ffffd0f8

0ffffd0fc

0xa 0xffffcd108 0x804842e 0x8 0x0

ret

0ffffd100

0ffffd108

0x804842e 0x8 0x0

leave

0ffffd104

0ffffd108

0x8 0x0

ret

0xffffd10c

0x0

 

20145316GDB调试汇编堆栈的更多相关文章

  1. GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 分析过程 这是我的C源文件:click here 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb ...

  2. 20145212——GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 测试代码 #include <stdio.h> short val = 1; int vv = 2; int g(int xxx) { return xxx + ...

  3. gdb调试汇编堆栈过程的学习

    gdb调试汇编堆栈过程的学习 以下为C源文件 使用gcc - g code.c -o code -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器: 进入之 ...

  4. 20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析

    20145223<信息安全系统设计基础> GDB调试汇编堆栈过程分析 分析的c语言源码 生成汇编代码--命令:gcc -g example.c -o example -m32 进入gdb调 ...

  5. GDB调试汇编堆栈

    GDB调试汇编堆栈 分析过程 C语言源代码 int g(int x) { return x+6; } int f(int x) { return g(x+1); } int main(void) { ...

  6. 赵文豪 GDB调试汇编堆栈过程分析

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

  7. 20145337 GDB调试汇编堆栈过程分析

    20145337 GDB调试汇编堆栈过程分析 测试代码 #include<stdio.h> short addend1 = 1; static int addend2 = 2; const ...

  8. 20145208 GDB调试汇编堆栈过程分析

    20145208 GDB调试汇编堆栈过程分析 测试代码 #include<stdio.h> short addend1 = 1; static int addend2 = 2; const ...

  9. 20145320GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 在这里首先感谢卢肖明的分析博客,为后面的同学减少了很多分析的负担. 分析过程 使用gcc - g example.c -o example -m32指令在64位的机器上产生 ...

随机推荐

  1. ISO9126软件质量模型

    ISO9126软件质量模型,是评价软件质量的国际标准.6个特性27个子特性组成. ISO/IEC9126软件质量模型是一种评价软件质量的通用模型,包括3个层次: 1.质量特性 2.质量子特性 3.度量 ...

  2. chrome45以后的版本安装lodop后,仍提示未安装解决

    请先查看你chrome浏览器的版本,如果是45版本以前的版本,安装后仍提示 "未安装" 或 "请升级" 请参照本链接解决:http://blog.sina.co ...

  3. [分享]一个String工具类,也许你的项目中会用得到

    每次做项目都会遇到字符串的处理,每次都会去写一个StringUtil,完成一些功能. 但其实每次要的功能都差不多: 1.判断类(包括NULL和空串.是否是空白字符串等) 2.默认值 3.去空白(tri ...

  4. hdu 1003 Max sum(简单DP)

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem ...

  5. makefile自动生成目标与依赖的关系

    有main.c: #include <stdio.h> #include "command.h" int main(int argc, const char *argv ...

  6. Storm calculate pv

    本题其实就是storm的wordcout,需要把一个gz压缩的文件读取,并使用storm计算其pv. 样本 数据: 存储为accesslog.gz 我把它加载到我的虚拟机中/mnt/下. 没有使用tr ...

  7. [转]通过AngularJS directive对bootstrap日期控件的的简单包装

    本文转自:http://www.cnblogs.com/Benoly/p/4109460.html 最近项目上了AngularJS,而原来使用的日期控件的使用方式也需要改变,于是开始了倒腾,看了官方的 ...

  8. 【问题&解决】解决 Android SDK下载和更新失败“Connection to https://dl-ssl.google.com refused”的问题

    缘由: 更新sdk,遇到了更新下载失败问题: Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xmlFetche ...

  9. 最小生成树 2429: [HAOI2006]聪明的猴子

    BZOJ 2429: [HAOI2006]聪明的猴子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 877  Solved: 566[Submit][ ...

  10. 匈牙利算法 codevs 2776 寻找代表元

    codevs 2776 寻找代表元  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题目描述 Description 广州二中苏元实验学校一共有n个社团,分别用 ...