linux3.0 内核级调试工具KDB支持反汇编
来源:互联网 发布:全能转盘抽奖软件 编辑:程序博客网 时间:2024/06/07 03:39
KDB是linux内核集成的一个调试工具,关于更多KDB的信息,请查阅相关的信息。本文就是移植kdb的反汇编命令ID。
在KDB成为内核自身的一部分的时候,关于ID命令就已经被移除,具体的原因不知道。现在的内核虽然支持kdb了,但是并没有这个命令
ID命令:可以直接对内核的函数进行反汇编,方便对内核死机问题定位。也方面我们了解内核函数的执行过程。
下面是在linux3.0内核中移植ID命令之后的效果:
下面我介绍一下移植的过程:
本文的移植是基于linux3.0内核版本,整体架构是基于MIPS,(kdb还支持x86,powpc,mips等,暂时我只是知道这些)
1、需要的文件
ansidecl.h bfd.h dis-asm.h kdba_id.c kdb_id.c mips-dis.c kdb.h(这个是要放在arch/mips/include/asm下)
在linux内核3.0版本中在kernel/中有dis-asm.h,可以直接进行copy或者调用,
mips-dis.c是KDB反汇编的核心文件,在这个文件中,主要是对mips架构的指令的解析,在内中存储的都是一条32位的指令编码。这个文件就是将内存中指令编码翻译成汇编语言,进而显示出来。
dis-asm.h 是反汇编需要用到的一些数据结构。
ansidecl.h bfd.h 都是需要的文件,主要功能并没有去研究。
kdb_id.c 是id命令的入口文件,核心的函数kdb_id,这个函数是ID命令的入口
kdba_id.c是基于mips架构的封装文件,主要是一些打印之类的函数。
部分文件可以在KDB的补丁中找到,稍候我会将这些文件上传一份。
http://oss.sgi.com/projects/kdb/ 可以找到以前kdb的补丁
http://download.csdn.net/detail/joney526/7530325 kdb资源
2、移植过程
linxu3.0内核关于KDB的存放地点为:
kdb的头文件:
include/linux/kdb.h
arch/mips/include/asm/kdb.h
主要的函数实现在:
kernel/debug/kdb/文件夹下:
1)首先将这些文件
ansidecl.h bfd.h dis-asm.h kdba_id.c kdb_id.c mips-dis.c copy到kernel/debug/kdb/
(你也可以copy到其他地方,但是你需要修改Makefile)我copy到kdb的主要目录处。方面查找和修改
拷贝 kdb.h 到arch/mips/include/asm;(注意在include/linux/也有一个kdb.h,这个文件是linux3.0内核自带的)
2)在kdb中注册id命令。
在/kernel/debug/kdb/kdb_main.c中
在函数kdb_inittab中添加注册ID命令
由于我在VI下无法用鼠标进行复制,所以这能粘贴一个图片了
3)修改头文件,解决依赖关系
这里就是将各个头文件的引用给修改正确,比如在dis-asm.h中,就引用了<asm/ansidecl.h >而在arch/mips/include/asm中早就不存在这个文件了。不知道是当时删除kdb的时候是否给漏删了,由于现在都放在kdb主目录中,所以直接修改为 include "ansidecl.h"
同理,依次的修改这几个头文件,也可以直接编译 make,根据编译的错误来定位
在kdb中以前用到的文件为 kdbprivate.h现在内核中更改为kdb_private.h,所以部分头文件中(kdb.h)回引用 include "kdbprivate.h"
修改为 include "kdb_private.h"
4)添加部分函数声明
在kdb_private.h中声明kdb_id.c中调用的函数
在make编译的时候,会提示这些的,
5)添加kdb的环境变量(必须要添加,否则id命令无法生效)
在kdb_private.h中
将宏 KDB_PLATFORM_ENV 修改为如上图所示,
IDMODE 是描述为mips指令
IDCOUNT 描述为一次显示的反汇编的行数。如文章开头处显示的id命令一共显示出16行反汇编代码
总结:本文就是简单的说明一下如何移植ID命令,算是给自己一个总结,在移植的过程中,并没有深入的研究其他部分,是指研究了一下怎么将这个函数给反汇编的。
上面的图片是kdb id 命令的一个调用图。最终实现反汇编的是print_insn_mips函数,在这个函数中会根据内存中的指令编码,查找相应的汇编指令
- linux3.0 内核级调试工具KDB支持反汇编
- 内核级调试工具kdb
- linux3.0内核KDB调试:无法获取部分符号
- Linux内核调试工具:Kdb应用指南
- linux内核编译调试工具KDB入门
- 内核驱动反汇编调试
- kdb 调试内核
- 使用KDB调试工具
- Linux内核调试工具:Kdb的编译安装
- 用GDB反汇编调试linux内核
- 基于fl2440 内核linux3.0添加dm9000支持
- linux 内核调试--KDB 入门指南
- 用kdb调试linux内核驱动
- 用kdb调试linux内核驱动
- 龙芯1B开启内核KDB调试
- KDB调试Linux4.2.6内核过程记录
- 用kdb调试linux内核驱动
- 配置串口使用KDB调试Linux内核
- 解决Ubuntu窗口没有边框的问题
- 溧水公布近三百处不可移动文物
- oracle中的having ,group by ,where之间联系与区别
- cocos2d-x 中多线程的c/c++代码通过JNI调用java代码
- nginx 数据类型解析
- linux3.0 内核级调试工具KDB支持反汇编
- MFC窗口创建过程
- git 设置
- java.io.FileNotFoundException: D:\workspace\tomcat\webroot (拒绝访问。)
- Cocos2D
- 课程设计
- 黑马程序员_异常处理
- 3D空间包围球(Bounding Sphere)的求法
- ios客户端暑期“动画屋“活动项目总结