5.2嵌入式linux程序编译与调试

  1. 实验二 嵌入式linux程序编译与调试

  • 实验目的:
  1. 学会使用及配置vim
  2. 掌握gcc编译器使用
  3. 掌握使用Gdb单步调试程序的方法
  • 实验要求:
  1. 熟悉使用该节所介绍的vim创建、编辑、保存文件。
  2. 分别用gcc实现预处理、编译、汇编、链接四个过程;
  3. 使用gcc编译多文件工程,并制作编译脚本。
  4. 利用Gdb单步调试修正结果错误的程序
  • 实验步骤:
  1. 用gcc实现预处理、编译、汇编、链接四个过程,使用gcc编译多文件工程,并制作编译脚本。

    1、gcc处理编译的四个过程

    1. 、源代码

技术分享

?

(2)、预处理

技术分享

生成main.i预处理文件实现头文件、宏、预编译展开

技术分享

?

(3)、编译

技术分享

生成main.S汇编文件

技术分享

(4)、汇编

技术分享

最后调用as汇编器,从汇编文件生成main.o文二进制目标文件

技术分享

?

(5)、链接

技术分享

最后调用ld链接器,把目标文件链接成可执行文件

技术分享

2、多文件工程编译

(1)、文件目录结构

技术分享

自定义头文件放在inc目录内,辅助模块源文件放在src目录内

(2)、编译脚本

技术分享

?

编译出带调试信息的可执行文件

(3)、执行编译

????技术分享

(4)、编译结果

技术分享

运行调试通过后,可以strip掉多余的符号信息,进行发布

技术分享

二、利用Gdb单步调试修正结果错误的程序

1、错误程序源码,

技术分享

2、编译程序

技术分享

3、运行程序

技术分享

逆向字符串打印结果不能正常显示!

4、利用Gdb调试定位问题

(1)、启动gdb载入调试程序

技术分享

???? (2)、断点到有问题的函数

技术分享

?

???? (3)、执行程序,运行至断点处

技术分享

?

???? (4)、显示问题函数代码

技术分享

?

(5)、断点到问题产生点

技术分享

?

(6)、继续执行,在问题产生点停下

技术分享

?

(7)、显示问题变量

技术分享

?

字符串逆向拷贝时数组位置向后多偏移了一位:

技术分享

应该改为:

技术分享

?

(7)、修改代码,程序编译运行验证

技术分享

实验心得:

????该实验是实现嵌入式linux程序的简单编译和调试的实现,主要是让我们学会如何去调试,深刻体会程序执行的每一个步骤,理解程序运行的实际过程。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。