山东大学项目实训树莓派提升计划二期(2)计算机系统原理实验二

前言

本文将介绍与 GNU GCC、GDB 和 objdump 工具使用的实验二。

GNU GCC,原名为 GNU C 语言编译器,因为它原本只能处理 C 语言,后变得可以处理更多的编程语言,许多操作系统如 Linux 及 BSD 家族都采用 GCC 作为标准编译器。

GDB 是 GNU debugger 的缩写,是 GNU 软件系统中的标准调试器,而 objdump 是在类 Unix 操作系统上显示关于目标文件的各种信息的命令行程序。这两个工具都可以用于反向工程。

上述三个工具中,第一个工具要求学生理解 GNU GCC 的基本使用方法,后两个工具则在 CS:APP 的第三章有所提及,是完成实验三的基础。因此将实验二设置为学习工具的使用,是为后面进行实验打下基础。

介绍

本实验需要学生完成一系列步骤,以此熟悉上述三个工具的使用,包括编写 C 语言的函数、使用 GCC 进行编译、通过 GDB 和 objdump 找到存放在内存中的 char 数组位置等。

树莓派支持的是 Linux/ARM 平台,但本实验是在 Linux/x86-64 平台上完善的,其汇编语言及可执行文件代码可能存在不同,所以本文将主要介绍 C 语言的内容。

文件内容

  • main.c:实验二 main 方法所在文件
  • support.c:学生需要编写的函数所在位置
  • support.h:头文件,无需修改
  • README:实验指导书实验二部分节选

具体内容

实验题目有 3 道:

  1. 修改 support.c 文件,编写计算阶乘的函数 add_up
  2. 修改 main.c 文件,使其可以顺利使用 GCC 进行编译
  3. 使用 GDB 在内存中找到 char 数组 str 的位置

其中 main 方法可以为我们对实验二管中窥豹。

/* 
 * 山东大学 计算机系统原理 实验二
 * 树莓派提升计划二期
 * 
 * main.c - 实验二的 C 源文件
 */

int main() {
    int init = 8;
    int rst = add_up(init);
    printf(str, rst);
    return 0;
}

实验过程简介

学生首先需要修改在 support.c 文件中函数 add_up 的函数体:

/* 
 * 山东大学 计算机系统原理 实验二
 * 树莓派提升计划二期
 * 
 * support.c - 实验二的 C 源文件
 */

int add_up(int n) {
    return n;
}

在上述文件中,并未引入 support.h 作为头文件,学生需要手动将其引入,否则编译时会报错,与此相同的还有 main.c 文件。

当学生使用 GCC 编译完成后,需要通过 objdump 找到 char 数组 str 的地址,然后使用 GDB 调试,找到对应的内存位置即可。这个过程比较重要,因为该步骤会在实验三中反复使用。

更具体的实验过程将会在实验二的实验指导书中详细给出。

实验编写简介

这个实验是在下一个实验「顽皮锁」完成后才加上的,目的是降低每个实验的难度,当然更多是让我首先理解了相关内容,这才方便出实验题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值