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内核 - 定位内核中的变量或数据结构的主要内容,如果未能解决你的问题,请参考以下文章
Bochs调试Linux内核6 - 启动过程调试 - 跳到bootsect引导程序执行
bochs运行早期linux0.11和linux0.98内核