操作系统研发和研究|Bochs调试Linux内核 - 定位内核中的变量或数据结构
到此网址下载,
http://oldlinux.org/Linux.old/bochs/linux-0.12-080324.zip
解压以后如下;
文章图片
第一个文件是Bochs安装文件;安装之;安装之后如下图;同时在下图目录新建0.11目录;
【操作系统研发和研究|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,这里面可能是一些工具;
文章图片
然后在此目录建立一个run.bat;内容如下图;
文章图片
安装目录根据自己的更改;运行此bat;如果写错 bochsrc-0.12-hd.bxrc ,则可能出现类似下图错误;
文章图片
运行以后,正常就进到
文章图片
先在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博客
推荐阅读
- 急于表达——往往欲速则不达
- 第三节|第三节 快乐和幸福(12)
- 20170612时间和注意力开销记录
- 2.6|2.6 Photoshop操作步骤的撤消和重做 [Ps教程]
- 对称加密和非对称加密的区别
- 眼光要放高远
- 樱花雨
- 前任
- 2020-04-07vue中Axios的封装和API接口的管理
- 烦恼和幸福