深入理解计算机系统lab1——gdb调试初步

深入理解计算机系统lab1——gdb调试初步

以下仅供最简单的入门和参考!!!!!!!

安装Linux环境,并进行简单程序的编译和GDB调试

一、安装linux系统与环境

在这里插入图片描述
第一步,在所使用的电脑平台上安装linux系统与环境;
下载VM这个虚拟机后,又下载ubantu的32位Linux操作系统,在VM成功创建了Linux环境的虚拟机。

在这里插入图片描述

二、在linux系统中使用gcc完成简单c语言的编译和执行

第二步,成功在linux系统中使用gcc完成简单c语言的编译和执行;
打开终端,vim hello.c进行编辑,编辑完成后按:wq保存并退出,gcc hello.c -o hello编译生成可执行文件,./hello将结果成功输出。

1.打开终端,vim hello.c 新建hello.c

在这里插入图片描述

2.编辑hello.c

在这里插入图片描述

3.保存hello.c并退出

在这里插入图片描述

4.gcc编译,生成可执行文件,执行并查看运行结果

在这里插入图片描述

三、GDB进行程序基本的程序调试和反汇编

第三步,使用GDB进行程序基本的程序调试和反汇编。

  1. gcc -g hello.c -o hello 生成可调试文件,gdb hello进入调试界面
    在这里插入图片描述

  2. list(l)将代码全部加载出来
    在这里插入图片描述

  3. breakpoint (b) 4(第四行)然后设置断点 ,并查看info b,添加成功。
    在这里插入图片描述

  4. run(r)执行,到断点处停止。
    在这里插入图片描述

  5. disassemble得到汇编代码。
    在这里插入图片描述

实验补充
四、使用指令新建、编辑、汇编、链接汇编语言程序
4.1新建并编辑源代码

命令:getdit sum.c
说明:gedit是一个GNOME桌面环境下兼容UTF-8的文本编辑器。使用vi或者vim同样可以实现新建与编辑。
在这里插入图片描述
在这里插入图片描述

4.2预处理

命令:gcc -E sum.c -o sum.i
说明:预处理时,编译器会将C源代码中包含的的头文件编译进来
在这里插入图片描述
在这里插入图片描述

4.3编译

命令:gcc -S sum.i -o sum.s
说明:gcc首先检查代码的规范性,是否有语法错误,确定代码实际要做的工作,让后将代码翻译成汇编语言。
在这里插入图片描述
在这里插入图片描述

4.4汇编

命令:gcc -c sum.s -o sum.o
说明:gcc进行汇编阶段,将编译阶段生成的”.s”文件转成二进制目标代码
在这里插入图片描述

4.5链接

命令:gcc sum.o -o sum.out
说明:链接过程将有关的目标文件彼此连接起来,使得所有目标文件成为一个能够执行的统一整体。
在这里插入图片描述

4.6执行

命令:./sum.out
说明:执行可执行文件,输出结果
在这里插入图片描述

五、能够使用gdb对汇编语言进行调试

5.1生成汇编代码

命令:gcc -g sum.c -o sum
说明:使用命令生成可以调试文件
在这里插入图片描述

5.2开始调试

命令:gdb sum
说明:使用gdb对生成的可调试文件进行调试
在这里插入图片描述

5.3设置新的断点

命令:breakpoint(b)
说明:设置断点的命令是break,它通常有如下方式:
break 在进入指定函数时停住
break 在指定行号停住。
break +/-offset 在当前行号的前面或后面的offset行停住。offiset为自然数。
break filename:linenum 在源文件filename的linenum行处停住。
break … if …可以是上述的参数,condition表示条件,在条件成
立时停住。比如在循环境体中,可以设置break if i=100,表示当i为100时停住程序。
可以通过info breakpoints [n]命令查看当前断点信息。
在这里插入图片描述

5.4单步执行程序

命令:si/ni
说明:ni/si都是汇编级别的断点定位。si会进入汇编和C函数内部,ni不会。

5.5查看寄存器

命令:info regs(i r)
说明:命令i r能够查看所有寄存器的值
在这里插入图片描述
执行命令i r后打印出所有寄存器的列表
在这里插入图片描述
程序运行到第七行输出,此时查看寄存器的值,可见eax=9结果正确

5.6查看指定内存内容

命令:examine(x)
说明:x的命令语法如下图所示
在这里插入图片描述

执行命令:x/10x $sp
说明:打印当前栈stack的10个元素
在这里插入图片描述
当前栈的第6、7元素对应于a、b的值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章