操作系统研发和研究|Bochs调试Linux内核 - 定位内核中的变量或数据结构

到此网址下载,
http://oldlinux.org/Linux.old/bochs/linux-0.12-080324.zip
解压以后如下;
操作系统研发和研究|Bochs调试Linux内核 - 定位内核中的变量或数据结构
文章图片

第一个文件是Bochs安装文件;安装之;安装之后如下图;同时在下图目录新建0.11目录;
【操作系统研发和研究|Bochs调试Linux内核 - 定位内核中的变量或数据结构】操作系统研发和研究|Bochs调试Linux内核 - 定位内核中的变量或数据结构
文章图片

把下载的如下内容拷贝过来; .bxrc, 这是bochs配置文件;
bochs配置文件包含如下两行,
floppya: 1_44="bootimage-0.12-hd", status=inserted
floppyb: 1_44="diskb.img", status=inserted
这是指定软驱A插入载有0.12版本的内核镜像的软盘; diskb.img,这里面可能是一些工具;
操作系统研发和研究|Bochs调试Linux内核 - 定位内核中的变量或数据结构
文章图片

然后在此目录建立一个run.bat;内容如下图;
操作系统研发和研究|Bochs调试Linux内核 - 定位内核中的变量或数据结构
文章图片

安装目录根据自己的更改;运行此bat;如果写错 bochsrc-0.12-hd.bxrc ,则可能出现类似下图错误;
操作系统研发和研究|Bochs调试Linux内核 - 定位内核中的变量或数据结构
文章图片

运行以后,正常就进到 停止;0.12版本内核已装载;可以输入调试命令;
操作系统研发和研究|Bochs调试Linux内核 - 定位内核中的变量或数据结构
文章图片

先在7c00设一个断点,然后下一行再输入 c ,执行到断点;
执行到断点如下图;这里是一条 mov ax, 0x07c0 指令;根据资料,这条指令是一些操作系统开始引导的起点;
操作系统研发和研究|Bochs调试Linux内核 - 定位内核中的变量或数据结构
文章图片

参照,https://blog.csdn.net/bcbobo21cn/article/details/105314444
然后看一下;此目录下还有SYSTEM.MAP文件;里面是内核的函数和变量的地址;这是编译内核时产生的;是别人做的,我不会做;
利用此文件可以在调试时快速定位到感兴趣的变量或函数;
操作系统研发和研究|Bochs调试Linux内核 - 定位内核中的变量或数据结构
文章图片

假设要定位到buffer_init函数,地址0xf488;
输入lb 0xf488;在此地址设一个断点;lb = lbreak; l,应该是line的意思;线性地址;
操作系统研发和研究|Bochs调试Linux内核 - 定位内核中的变量或数据结构
文章图片

然后输入 c 继续执行;但是就挂了;如下图;前头相关的内容还没看,可能还有些配置没弄完;
再试另外的地址也是挂掉;
操作系统研发和研究|Bochs调试Linux内核 - 定位内核中的变量或数据结构
文章图片

主要参考的 Linux内核完全剖析 - 基于0.12内核 一书;还有,
bochs调试linux 0.11内核_envy2008的专栏-CSDN博客

    推荐阅读