Bochs调试Linux内核 - 定位内核中的变量或数据结构

到此网址下载,

http://oldlinux.org/Linux.old/bochs/linux-0.12-080324.zip

解压以后如下; 

Bochs调试Linux内核 - 定位内核中的变量或数据结构_第1张图片

第一个文件是Bochs安装文件;安装之;安装之后如下图;同时在下图目录新建0.11目录;

Bochs调试Linux内核 - 定位内核中的变量或数据结构_第2张图片

把下载的如下内容拷贝过来; .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内核 - 定位内核中的变量或数据结构_第3张图片

然后在此目录建立一个run.bat;内容如下图;

Bochs调试Linux内核 - 定位内核中的变量或数据结构_第4张图片

 安装目录根据自己的更改;运行此bat;如果写错 bochsrc-0.12-hd.bxrc ,则可能出现类似下图错误;

Bochs调试Linux内核 - 定位内核中的变量或数据结构_第5张图片

运行以后,正常就进到 停止;0.12版本内核已装载;可以输入调试命令;

Bochs调试Linux内核 - 定位内核中的变量或数据结构_第6张图片

先在7c00设一个断点,然后下一行再输入 c ,执行到断点;

执行到断点如下图;这里是一条 mov ax, 0x07c0 指令;根据资料,这条指令是一些操作系统开始引导的起点;

Bochs调试Linux内核 - 定位内核中的变量或数据结构_第7张图片

参照,https://blog.csdn.net/bcbobo21cn/article/details/105314444
然后看一下;此目录下还有SYSTEM.MAP文件;里面是内核的函数和变量的地址;这是编译内核时产生的;是别人做的,我不会做;

利用此文件可以在调试时快速定位到感兴趣的变量或函数;

Bochs调试Linux内核 - 定位内核中的变量或数据结构_第8张图片

假设要定位到buffer_init函数,地址0xf488;

输入lb 0xf488;在此地址设一个断点;lb = lbreak;    l,应该是line的意思;线性地址;

Bochs调试Linux内核 - 定位内核中的变量或数据结构_第9张图片

然后输入 c 继续执行;但是就挂了;如下图;前头相关的内容还没看,可能还有些配置没弄完;

再试另外的地址也是挂掉;

Bochs调试Linux内核 - 定位内核中的变量或数据结构_第10张图片

主要参考的 Linux内核完全剖析 - 基于0.12内核 一书;还有,

    bochs调试linux 0.11内核_envy2008的专栏-CSDN博客

你可能感兴趣的:(操作系统研发和研究,Linux开发,linux,数据结构,bochs)