GDB调试汇编分析
GDB调试汇编分析
代码

本次实践我参照了许多先做了的同学的博客,有卢肖明,高其,张梓靖同学。代码借用的是卢肖明同学的代码进行调试运行。
GCC编译
- 使用
gcc -g gdbtest.c -o gdbtest -m32命令在64位的机器上产生32位汇编代码 在使用gdb进行调试运行时,有cgdb和gdb两种工具,我建议大家使用张梓靖同学使用的cgdb工具,因为使用时可以随时看到自己的源代码,看到我们的断点在哪里,每一步返回值到了哪行,更加直观。
分析过程
使用b main指令在main函数处设置断点,然后,使用r指令运行代码,使用disassemble指令获取汇编代码

使用display /i $pc(结合display命令和寄存器/pc内部变量)指令进行设置

- 可见此时主函数的栈基址为0xffffd068,用x(examine)指令查看内存地址中的值,但目前%esp所指堆栈内容为0,%ebp所指内容也为0
- 用i r指令查看各寄存器的值
- 依次如下指令调试汇编代码,并查看%esp、%ebp和堆栈内容:
- 1、使用si指令单步跟踪一条机器指令
- 2、使用i r指令查看各寄存器的值(在这里要看%eip、%eax、%esp和%ebp)
- 3、使用x/na %esp对应的值指令查看堆栈变化


将上一个函数的基址入栈,从当前%esp开始作为新基址:

call指令将下一条指令的地址入栈,此时%esp,%ebp和堆栈的值为:



- 实参准备入栈:


- 实参的计算在%eax中进行:




- 将栈中的数据push


- push后寄存器中的值发生转变。



函数f修改了%esp,用leave指令恢复。

ret结束main函数

总结反思
- 这次学习让我对于gdb有了更加深刻地认识,设置断点是我们在进行编写代码时在整体编译没有问题,但是却无法得到我们想要的结果时所进行分段纠错步骤,这次的实践让我对于堆栈变化了有了更加深刻的理解,在使用终端三件工具编程时,没有编程软件上自带写好我们拿来就用的断点设置按钮,之后若是遇到这样的问题我们只能自己动手去做,所以说这次的实践又是我们掌握的一件有力的linux中C语言编程工具。
gdb调试分析汇总表


GDB调试汇编分析的更多相关文章
- 20145233 GDB调试汇编分析
GDB调试汇编分析 代码 #include<stdio.h> short addend1 = 1; static int addend2 = 2; const static long ad ...
- 20145318 GDB调试汇编堆栈分析
20145318 GDB调试汇编堆栈分析 代码 #include<stdio.h> short addend1 = 1; static int addend2 = 2; const sta ...
- 20145219 gdb调试汇编堆栈分析
20145219 gdb调试汇编堆栈分析 代码gdbdemo.c int g(int x) { return x+19; } int f(int x) { return g(x); } int mai ...
- gdb调试汇编堆栈分析
代码(src/05/gdb.c) int g(int x) { return x + 4; } int f(int x) { return g(x); } int main(void) { retur ...
- 20145310 GDB调试汇编堆栈分析
GDB调试汇编堆栈分析 由于老师说要逐条分析汇编代码,所以我学习卢肖明同学的方法,重新写了一篇博客. 代码: #include<stdio.h> short addend1 = 1; st ...
- GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 分析过程 这是我的C源文件:click here 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb ...
- 20145212——GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 测试代码 #include <stdio.h> short val = 1; int vv = 2; int g(int xxx) { return xxx + ...
- gdb调试汇编堆栈过程的学习
gdb调试汇编堆栈过程的学习 以下为C源文件 使用gcc - g code.c -o code -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器: 进入之 ...
- 20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析
20145223<信息安全系统设计基础> GDB调试汇编堆栈过程分析 分析的c语言源码 生成汇编代码--命令:gcc -g example.c -o example -m32 进入gdb调 ...
随机推荐
- 文件服务器:FTP服务器详解
文件服务器:FTP服务器 数据传输原理 功能简介 文件的传输与管理 不同等级的用户身份:user.guest.anonymous 实体用户.权限较完整 匿名用户.下载资源的能力 命令记录与日志文件记录 ...
- 模拟搭建Web项目的真实运行环境(六)
今天把Redis和Mongodb的操作整理一下,方便日后自己查看,废话不多说,直接进入主题. 一.Redis 1. 引用StackExchange.Redis.dll 由于ServiceStack.R ...
- 大数据系列-CDH环境中SOLR入数据
1 创建集合 SSH远程连接到安装了SOLR的CDH节点. 运行solrctl instancedir --generate /solr/test/GX_SH_TL_TGRYXX_2 ...
- retrofit使用随记
1.请求接口 public interface RetrofitApi { /*注册*/ /*登录*/ @FormUrlEncoded //post请求带这个 @POST("url" ...
- DataTable 只保留想要的几列
using System; using System.Collections; using System.Configuration; using System.Data; using System. ...
- 用javascript设置和读取cookie的例子
请看下面用javascript设置和读取cookie的简单例子,现在的问题是,如果要设置的是一个cookie集,比如在cookie1集中有uname,uid两组信息,应该如何写呢?cookie(&qu ...
- Unity IOS Build的Graphics API最好是固定Opengl ES 2.0
不要选择Automatic也不要选择Metal,因为这个选项可能会导致app在Iphone6上出现crash. 一个类似的crash堆栈: http://stackoverflow.com/quest ...
- 关于安装Apache之后,解析PHP的配置
需要配置四个地方 LoadModule php5_module modules/libphp5.soServerName localhost:80DirectoryIndex index.phpAdd ...
- 1.3 jQuery基础
使用jQuery需要引用jQuery文件(页面引用多个js文件时jQuery在最前面) <script src="jquery-1.11.2.min.js"></ ...
- 【转】http头部详解
原地址:http://www.cnblogs.com/ziwuge/archive/2011/09/27/2193385.html HTTP 头部解释 1. Accept:告诉WEB服务器自己接受什么 ...