GDB调试汇编堆栈过程分析

虚拟机中分析过程

  • 输入gcc - g example.c -o example -m32指令在64位机器上产生32位汇编,但出现以下错误:

  • 这时需要使用sudo apt-get install libc6-dev-i386命令安装一个库之后就可以产生汇编代码了。

  • 使用gdb example进入gdb,b example.c:main设置一个函数断点,run启动程序

  • disassemble获取汇编代码,若命令不带参数,默认的反汇编范围是所选择帧的pc附近的函数。info registers列出使用的寄存器.

  • 使用x 0xffffd048指令查看内存地址中的值,但目前%esp所指堆栈内容为0,%ebp所指内容也为0。

  • display,设置程序中断后欲显示的数据及其格式。使用命令display /i $pc每次程序中断后可以看到即将被执行的下一条汇编指令,可以

    其中 $pc 代表当前汇编指令,/i 表示以十六进行显示。

  • si执行一条汇编指令

  • %esp、%ebp(info registers)和堆栈内容的变化(x/na %esp)

一直使用以上三个指令,观察其变化

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

  • 将上一个函数的基址入栈,将当前%esp作为新基址。

  • 准备传参

  • 计算在%eax中进行

  • 查看f函数的汇编代码

  • 执行g函数,g初始化栈指针

  • g分配栈空间

  • 计算short+in

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

  • ret返回g中call的调用位置

  • 释放当前子程序在堆栈中的局部变量,恢复被函数修改的%ebp和%esp

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

  • 主函数汇编代码

  • 进入main函数, %esp加立即数4

  • 将%edx于%eax相加

  • leave返回准备栈

  • 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
ret 0x804841d 0xffffd04c 0x0 0xe

20145218 GDB调试汇编堆栈过程分析的更多相关文章

  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. 20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析

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

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

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

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

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

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

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

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

    GDB调试汇编堆栈过程分析 首先需要输入sudo apt-get install libc6-dev-i386安装一个库才能产生汇编代码,然后输入gcc - g example.c -o exampl ...

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

    20145312 GDB调试汇编堆栈过程分析 参考资料 卢肖明同学的博客:<GDB调试汇编堆栈过程分析>: http://www.cnblogs.com/lxm20145215----/p ...

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

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

随机推荐

  1. 阿里云CDN刷新预热接口

    阿里云OSS映射的文件地址需要即时访问到最新数据,需要即时调用CDN的刷新预热类接口 RefreshObjectCaches 刷新接口. 参考官方接口文档资料:https://help.aliyun. ...

  2. c# 动态调用.net编写的webservices接口

    创建类WebServiceHelper: public class WebServiceHelper { #region 动态调用WebService动态调用地址 /// < summary&g ...

  3. HTML5的Video标签的属性,方法和事件汇总

    <video>标签的属性 src :视频的属性 poster:视频封面,没有播放时显示的图片 preload:预加载 autoplay:自动播放 loop:循环播放 controls:浏览 ...

  4. Java 把 InputStream 转换成 String 的几种方法

    我们在 Java 中经常会碰到如何把 InputStream 转换成 String 的情形,比如从文件或网络得到一个 InputStream,需要转换成字符串输出或赋给别的变量. 未真正关注这个问题之 ...

  5. DP专题训练之HDU 1231 最大连续子序列

    Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j < ...

  6. C#中static关键字的作用

    静态分配有两种情况:1.用在类里的属性.方法前面,这样的静态属性与方法不需要创建实例就能访问,通过类名或对象名都能访问它,静态属性.方法只有"一份":即如果一个类新建有N个对象,这 ...

  7. 如何在Python中实现这五类强大的概率分布

    R编程语言已经成为统计分析中的事实标准.但在这篇文章中,我将告诉你在Python中实现统计学概念会是如此容易.我要使用Python实现一些离散和连续的概率分布.虽然我不会讨论这些分布的数学细节,但我会 ...

  8. Boostrap

    基本认知: Boostrap绝对是目前最流行用得最广泛的一款框架.它是一套优美,直观并且给力的web设计工具包,可以用来开发跨浏览器兼容并且美观大气的页面. Bootstrap的优缺点: 缺点: 1. ...

  9. linux两台服务器之间文件/文件夹拷贝

    跨服务器拷贝需要用到的命令是scp. ----------------------拷贝文件夹---------------------------------------------- 把当前文件夹t ...

  10. 【转】UML类图与类的关系详解

    UML类图与类的关系详解   2011-04-21 来源:网络   在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(D ...