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

Posted bcbobo21cn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bochs调试Linux内核 - 定位内核中的变量或数据结构相关的知识,希望对你有一定的参考价值。

到此网址下载,

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

解压以后如下; 

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

把下载的如下内容拷贝过来; .bxrc, 这是bochs配置文件;

bochs配置文件包含如下两行,

    floppya: 1_44="bootimage-0.12-hd", status=inserted
    floppyb: 1_44="diskb.img", status=inserted

这是指定软驱A插入载有0.12版本的内核镜像的软盘; diskb.img,这里面可能是一些工具;

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

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

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

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

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

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

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

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

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

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

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

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

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

以上是关于Bochs调试Linux内核 - 定位内核中的变量或数据结构的主要内容,如果未能解决你的问题,请参考以下文章

Bochs调试Linux内核6 - 启动过程调试 - 跳到bootsect引导程序执行

Bochs调试Linux内核初步学习 - 3

linux内核调试的主要方法

bochs运行早期linux0.11和linux0.98内核

Ubuntu14.04下搭建Bochs仿真平台,同时用该平台安装Linux0.11内核

调试 – 观察Linux内核中的变量(内存地址)更改,并在更改时打印堆栈跟踪?