- 熟悉Linux操作系统环境;
- 通过了解高级语言源程序和目标机器代码的不同表示及其相互转换,深刻理解高级语言和机器语言之间的关系,以及机器语言和不同体系结构之间的关系。
- 掌握GCC在Linux 环境下编写C语言程序命令和步骤;
- 掌握GDB调试C语言程序命令和步骤。
- 使用文本编辑器编写hello源代码;
- 使用GCC编译器,逐步编译hello 程序,观察中间文件。
- 使用文本编辑器编写 tst.c源程序;
- 使用GDB调试 tst程序,掌握常用调试命令。
未安装相应的软件故无法打开
④链接生成hello 3、使用Editplus或者其他合适的软件,查看hello.i,hello.s,hello.o hello 文件内容,截图展示。 ①hello.i ②hello.s ③hello.o ④hello 4、使用文本编辑器编写实验讲义中给出的 tst.c 源码,截图展示。 5、根据实验讲义步骤,学习逐步调试 tst程序,掌握 GDB 常用命令,截图展示。 准备启动gdb gdb l从第一行开始列出源码
gdb直接回车表示重复
gdb break 16在16行设置断点
gdb rrun命令简写
gdb nnext简写,单条执行命令
gdb ccontinue简写,继续运行
gdb p i打印 i 的值
gdb btbacktrace,查看函数的调用的栈帧和层级关系
gdb finish退出函数
gdb g退出
6、结合实验操作以及GDB的help,了解以下命令的作用。| 命令 | 作用 |
|---|---|
| gdb | 直接回车表示重复 |
| list | 查看原代码,简写l |
| run | 重新开始运行文件 |
| break | 设置断点 |
| 打印值及地址,简写p | |
| continue | 继续运行,简写c |
| next | 单步调试(逐过程,函数直接执行),简写n |
| step | 单步调试(逐语句:跳入自定义函数内部执行),简写s |
| info | 查看函数内部局部变量的数值,简写i |
| finish | 结束当前函数,返回到函数调用点 |
| quit | 退出gdb,简写q |
| help | 查看gdb所有内部命令及使用说明 |
不相同。本质上来说,机器语言是CPU可以所执行的语言,是与其特殊的架构相契合的。不同的机器可能使用不同架构的CPU,因此生成的可执行文件目标代码也不相同。同时,在形成汇编语言的时候也会受到编译器、操作系统、ISA等影响。
2、你能在可执行目标文件中找出函数 printf 对应的机器代码段吗?能的话,请标示出来。可以。先编写特定的.c文件
再编译,并以16进制查看
查找特定字符从而确定printf
源文件多数使用人可以理解的“高级语言”组成的,但要使机器能够执行就必须转化为机器语言,而可执行文件正是机器语言的载体,它由机器语言组成,使用内容完全不一样。



