项目简介
本项目是一个基于C语言和操作系统的学习项目,借助一系列工具和代码解析、转换和操作COFF、ELF、OMF和Mach-O等不同格式的对象文件,让学习者通过实践深入理解C语言和操作系统的核心概念、操作系统工作原理以及二进制文件结构。
项目的主要特性和功能
- 对象文件格式转换:支持COFF、ELF、OMF和Mach-O格式对象文件相互转换,提供命令行工具
objconv
执行转换操作。 - 反汇编功能:能将机器代码反汇编为可读汇编指令,提供详细调试信息和符号表解析功能。
- 开发环境配置:支持在macOS和Linux系统上开发和构建,使用Docker进行构建环境隔离和管理。
- 调试工具:提供GDB和GDB GUI工具,支持在QEMU模拟器中调试,有丰富GDB命令和调试技巧。
- 学习资源:提供丰富学习资源链接,助于学习者深入理解操作系统和C语言知识。
安装使用步骤
1. 开发环境配置
macOS 环境
- 安装Docker(可选),用于执行编译构建工具。
- 安装Qemu:
brew install qemu
。 - 初始化构建环境:
make init
。 - 安装NASM和GCC编译器:
brew install nasm x86_64-elf-gcc
。 - 安装
xorriso
(可选,grub-mkrescue
依赖):brew install xorriso
。 - 构建
grub-mkrescue
(可选):./install-grub.sh
。 - 安装GDB GUI工具(可选):
brew install gdbgui
。
Linux 环境(以Debian/Ubuntu为例)
bash
apt install -y gcc nasm grub2 xorriso
apt install -y qemu-system-x86
2. 开发过程
- 构建内核:
make kernel
。 - 在QEMU模拟器中启动内核:
make run-kernel
。
3. 调试
- 在QEMU模拟器中启动内核并开启GDB调试:
make run-kernel DEBUG=1
。 - 使用GDB或GDB GUI连接GDB调试,自动在入口
k_main
处设置断点。 - GDB常用命令:
l
:查看当前源码。- 设置断点:
b 6
:在当前源码文件的第6行设置断点。b main.c:6
:在源码文件main.c
的第6行设置断点。b main.c:welcome
:在源码文件main.c
的welcome
函数设置断点。tb 6
:在当前源码文件的第6行设置临时断点,执行后会自动删除。
- 流程控制:
c
:继续执行。n
:单步执行。s
:单步执行(进入子函数)。info b
:查看断点列表。d 1
:删除第1个监视的表达式或断点。disable 1
:禁用第1个监视的表达式或断点。enable 1
:启用第1个监视的表达式或断点。u 6
:执行到第6行处断点。finish
:一直运行到当前函数返回。q
:退出调试。
- 数据观察:
p x
:显示表达式x
的内容。whatis x
:查看表达式x
的数据类型。watch x
:监视表达式x
的变化,在执行时会打印该表达式的变化。info watch
:显示当前的监视列表。
frame 0
:打印第0层的帧栈信息。info reg
:打印寄存器信息。info stack
:打印堆栈信息。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】