littlebot
Published on 2025-04-08 / 1 Visits
0

【源码】基于C语言和操作系统开发的学习项目

项目简介

本项目是一个基于C语言和操作系统的学习项目,借助一系列工具和代码解析、转换和操作COFF、ELF、OMF和Mach-O等不同格式的对象文件,让学习者通过实践深入理解C语言和操作系统的核心概念、操作系统工作原理以及二进制文件结构。

项目的主要特性和功能

  1. 对象文件格式转换:支持COFF、ELF、OMF和Mach-O格式对象文件相互转换,提供命令行工具objconv执行转换操作。
  2. 反汇编功能:能将机器代码反汇编为可读汇编指令,提供详细调试信息和符号表解析功能。
  3. 开发环境配置:支持在macOS和Linux系统上开发和构建,使用Docker进行构建环境隔离和管理。
  4. 调试工具:提供GDB和GDB GUI工具,支持在QEMU模拟器中调试,有丰富GDB命令和调试技巧。
  5. 学习资源:提供丰富学习资源链接,助于学习者深入理解操作系统和C语言知识。

安装使用步骤

1. 开发环境配置

macOS 环境

  1. 安装Docker(可选),用于执行编译构建工具。
  2. 安装Qemu:brew install qemu
  3. 初始化构建环境:make init
  4. 安装NASM和GCC编译器:brew install nasm x86_64-elf-gcc
  5. 安装xorriso(可选,grub-mkrescue依赖):brew install xorriso
  6. 构建grub-mkrescue(可选):./install-grub.sh
  7. 安装GDB GUI工具(可选):brew install gdbgui

Linux 环境(以Debian/Ubuntu为例)

bash apt install -y gcc nasm grub2 xorriso apt install -y qemu-system-x86

2. 开发过程

  1. 构建内核:make kernel
  2. 在QEMU模拟器中启动内核:make run-kernel

3. 调试

  1. 在QEMU模拟器中启动内核并开启GDB调试:make run-kernel DEBUG=1
  2. 使用GDB或GDB GUI连接GDB调试,自动在入口k_main处设置断点。
  3. GDB常用命令:
  4. l:查看当前源码。
  5. 设置断点:
    • b 6:在当前源码文件的第6行设置断点。
    • b main.c:6:在源码文件main.c的第6行设置断点。
    • b main.c:welcome:在源码文件main.cwelcome函数设置断点。
    • tb 6:在当前源码文件的第6行设置临时断点,执行后会自动删除。
  6. 流程控制:
    • c:继续执行。
    • n:单步执行。
    • s:单步执行(进入子函数)。
    • info b:查看断点列表。
    • d 1:删除第1个监视的表达式或断点。
    • disable 1:禁用第1个监视的表达式或断点。
    • enable 1:启用第1个监视的表达式或断点。
    • u 6:执行到第6行处断点。
    • finish:一直运行到当前函数返回。
    • q:退出调试。
  7. 数据观察:
    • p x:显示表达式x的内容。
    • whatis x:查看表达式x的数据类型。
    • watch x:监视表达式x的变化,在执行时会打印该表达式的变化。
    • info watch:显示当前的监视列表。
  8. frame 0:打印第0层的帧栈信息。
  9. info reg:打印寄存器信息。
  10. info stack:打印堆栈信息。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】