20145234黄斐《信息安全系统设计基础》GDB调试汇编堆栈过程分析(1)

堆栈跟踪

首先编辑一个程序

用gcc编译,再使用gdb调试,发现gdb尚未下载

下载后重新运行gdb

设置断点:b+行号或者“main”

运行:r

frame:打印出的信息:栈的层编号,当前的函数名,函数参数值,函数所在文件及行号,函数执行到的语句。

info frame:打印出的信息:函数地址,调用函数的地址,被调用函数的地址,目前的函数是由什么样的程序语言写成的、函数参数地址及值、局部变量的地址等等。

输入命令disassemble:显示出该代码(main())的汇编形式

info registers,显示当前(main()处)寄存器值

使用s单步运行程序

使用 up down ,跳转不同堆栈,查询其中的堆栈简要信息

该代码中,共存在过3个堆栈,对每个堆栈查询其详细信息,观察堆栈变化:

由main函数形成的堆栈(#2)

由f1函数形成的堆栈(#1):

由g1函数形成的堆栈(#0):

该代码中,共存在过3个堆栈,对每个堆栈查询其详细信息,观察堆栈变化:

时间: 2024-10-25 20:02:18

20145234黄斐《信息安全系统设计基础》GDB调试汇编堆栈过程分析(1)的相关文章

20145239 GDB调试汇编堆栈过程分析

20145239 GDB调试汇编堆栈过程分析 测试源代码 #include<stdio.h> short addend1 = 1; static int addend2 = 2; const static long addend3 = 3; static int g(int x) { return x + addend1; } static const int f(int x) { return g(x + addend2); } int main(void) { return f(8) +

GDB调试汇编堆栈过程分析

首先我自己编译个代码,无非就是调用函数吗. 在这里我先大致手绘了一张整个程序在存储空间的汇编代码(根据P239上的汇编代码) 然后对其进行汇编.进入gdb,获得main的汇编代码. 给 sum 设置断点 获取sum的汇编代码 首先我分析一下该汇编代码: 按照书上P238所讲的,首先会初始化&esp和%ebp,这里并没有看到,我猜测是因为我们所设置的断电是给main函数的,所以只显示执行main时的汇编代码. 初始化栈指针和帧指针之后,就执行call main,然后%ebp入栈,%ebp保存%es

GDB调试汇编堆栈

GDB调试汇编堆栈 准备工作 终端编译工具: 编译64位Linux版本32位的二进制文件,需要安装一个库,使用指令sudo apt-get install libc6-dev-i386 测试代码: test.c 分析过程 1.生成汇编代码:gcc -g gdbtest.c -o gdbtest -m32 2.调试:gdb test 3.设置断点,因为目的是分析而不是调试bug,所以我们将断点设置在main函数 4.开始gdb调试:r(un),如若想获取此时的汇编代码,可用指令:disassemb

20145207《信息安全系统设计基础》课程总结

20145207<信息安全系统设计基础>课程总结 链接汇总 第0周博客认识Linux系统,安装虚拟机,课本概述 第1周博客Linux系统基础命令,vim使用 第2周博客vim编辑器,GCC编译器的使用,gdb调试程序工具,Makefile自动化编译 第3周博客教材:第二章<信息的表示和处理> 第4周博客 第5周博客教材:第三章<程序的机器级表示>,理解函数调用栈帧的概念,并能用GDB进行调试 第6周博客教材:第四章<处理器体系结构> 第7周博客教材:第六章&

2019-2020-1 20175313 《信息安全系统设计基础》第三周学习总结

目录 一.教材学习内容总结 二.教材学习中的问题和解决过程 三.心得体会 四.学习进度条 五.参考资料 一.教材学习内容总结 数据类型 注意:汇编代码也使用"l"来表示4字节整数和8字节双精度浮点数.这不会产生歧义,因为浮点数使用的是一组完全不同的指令和寄存器. 操作数 操作数可分为三种类型: 1. 立即数 2. 寄存器 3. 内存引用 操作指示符 过程 P调用Q: call Q该指令会把P中call Q的下一条指令的地址A压入栈中,并把程序计数器设置为Q的代码的起始位置. retq该

20145234黄斐《信息安全系统设计基础》第七周(Linux命令复习)

已经到了11月,学期过半,而<信息安全系统设计基础>这门课也要到了期中考试了.所以,我在这里,对前半个学期的最基础的知识,做一个复习 复习计划分为两步,本次为Linux命令,下次计划复习git与vim相关指令 本周学习内容在另一篇博客20145234黄斐<信息安全>第七周学习总结上 Linux命令 1.常用小技巧 tab 补全命令.补全目录.补全命令参数 Ctrl+c 终止当前运行的程序,但不结束终端 Ctrl+d 结束输入或退出终端 Ctrl+s 暂停当前程序,任意键恢复 Ctr

信息安全系统设计基础实验五—20135214万子惠20135227黄晓妍

北京电子科技学院(BESTI) 实验报告 课程:信息安全系统设计基础               班级:1352 姓名:黄晓妍 万子惠 学号:20135227 20135214 成绩:指导教师:娄佳鹏           实验日期:2015.11.24 实验密级:预习程度: 实验时间:15:30~18:00 仪器组次:必修/选修:       必修     实验序号:五 实验名称:简单嵌入式WEB 服务器实验 实验目的与要求: 掌握在 ARM 开发板实现一个简单WEB 服务器的过程. 学习在 A

20145322 《信息安全系统设计基础》课程总结

#20145322 <信息安全系统设计基础>课程总结 每周作业链接汇总 第零周 预习课程知识,安装环境 第一周 Linux 目录结构及一些基本的linux操作和命令 第二周 学习内容 熟悉Linux系统下的开发环境 熟悉vi的基本操作 熟悉gcc编译器的基本原理 熟练使用gcc编译器的常用选项 熟练使用gdb调试技术 熟悉makefile基本原理及语法规范 掌握静态库和动态库的生成与调用方法 理解C程序中模块的概仿,模块分解的"高内聚,低耦合"的原则 了解链接的概念 第三周

20145307《信息安全系统设计基础》第五周学习总结PT2

20145307<信息安全系统设计基础>第五周学习总结PT2: 教材学习内容总结 之前有第一部分学习总结: http://www.cnblogs.com/Jclemo/p/5962219.html 以下为第二部分 执行汇编命令:gcc –s xxx.c –o xxx.s反汇编命令:objdump –d xxx 64位处理器得到32代码的命令:gcc –m32 –s xxx.c Ltme: 1.三种操作数: 立即数:常数值.表示为$c标准表示的整数. 寄存器:表示某个寄存器的内容. 存储器:根据