内核调试番外篇 - KDB的介绍与简单使用
From: 内核&调试调试
1、什么是 KDB?
kdb是一个Linux系统的内核调试器,它是由SGI公司开发的遵循GPL许可证的开放源码调试工具。kdb嵌入在Linux内核中,为内核&&驱动程序员提供调试手段。它适合于调试内核空间的程序代码,譬如进行设备驱动程序调试,内核模块的调试等。
2、为什么要用KDB?
Bug处处有,不同人的编码思维,以及架构思维!总是会导致Bug的出现,Bug就像小强一样,永远杀不完!也许今天你的架构能支持当前业务,可是明天突然流量暴增,你那套架构就已经是Bug了!
对程序员而言,Bug远远没有到达上述那种高深的地步,架构有架构师!程序员往往只需要保证我们自己的那一亩三分田地的代码是OK的!不管业务需求,不管风吹雨打!有的程序员每天都在push代码,可是正儿八斤高效的代码极其少,有的程序员甚至可笑的说,我怎么着也是写过xx万行代码的大牛!笑而不语。
在我看来,高效代码就是结合需求在不断的压力测试中慢慢改进,这样的代码才是优秀代码!还有一个就是判断一个程序员是否算是程序员的时候,就应该问他解决过的Bug,以及解决Bug的途径!没错,调试工具这里就显得很重要~ 一个好的程序员必是一个好的调试工程师!同样的问题,好的程序员往往10分钟就能搞定,而Low的程序员只会说:”这不可能啊、我的代码没问题啊、见鬼了、我的代码肯定没问题”之类的话!
KDB做为一款内核级别的调试器,对于内核程序员 && 驱动程序员的帮助非常大,KDB的主要优点包括它允许进行内存地址和寄存器修改,并且可以设置堆栈,我本人最喜欢的一个功能就是反汇编了。关于KDB一些使用心得我也会在后续慢慢写出来!
3、开始使用KDB
内核在3.x中已经默认自带KDB了,所以我们只需要开启KDB相关的宏即可,再也不需要像2.6.x的时候去下载KDB的补丁了!
打开宏CONFIG_KGDB_KDB
,重新编译内核即可!
3.1、启动KDB
echo g > /proc/sysrq-trigger
3.2、命令介绍
a.基本调试命令
命令 | 参数 | 示例 | 备注 |
---|---|---|---|
go | vaddr | go 0xxxxxxxx | 如没有设置断点,此命令将离开KDB环境,切换到正常状态 |
ss | None | ss | 单步调试,只执行一条指令,结合断点使用 |
ssb | None | ssb | 单步调试,执行到分支或者函数调用时停止,结合断点使用 |
b.内存操作命令
命令 | 参数 | 示例 | 备注 |
---|---|---|---|
md | vaddr [line-count [output-radix]] | md 0xffffffffbfc00400 1 16 | 显示内存内容,如果不指定参数,将使用缺省! |
第一个参数为地址显示行数(缺省为4行),每多一行就会地址偏移0x10!
第二个参数是以几进制显示,支持的有(8,10,16)|
|md[1 - 8]| vaddr [line-count [output-radix]]| md4 0xffffffffbfc00400 1 16
结果:
00000003 0000000| 此系列命令为md的扩展,md后面的常数表示显示的内存按照常数个字节常数个字节的显示!|
|mds| vaddr [line-count [output-radix]]| mds 0xffffffff8097c0a0| 以符号的形式显示内存内容,每行只显示一个符号!|
|mm| vaddr contents| mm 0xffffffffbfc00400 0x1| 修改内存地址的内容|
|mdp| vaddr | mdp vaddr |mdp 0x1fc00400| 读取物理地址|
c.堆栈操作命令
命令 | 参数 | 示例 | 备注 |
---|---|---|---|
bt | vaddr | bt | 如果不指定参数,则显示当前的堆栈调用操作,如果指定地址则显示地址的堆栈调用 |
btp | pid | bt 630 | 显示630号进程的堆栈调用 |
bta | None | bta | 显示所有进程的堆栈调用 |
d.断点操作命令
命令 | 参数 | 示例 | 备注 |
---|---|---|---|
bp | vaddr | bt 0xffffffffbfc00400 | 设置断点,直接输入bp可显示断点 |
bl | vaddr | bl | 显示断点 |
bc | bpnum | bc 0 |
bc * 清除断点#0,*表示清除所有的断点
|
bd | bpnum | bd 0 | 使断点#0无效 |
be | bpnum | be 0 | 激活断点#0 |
e.系统命令&&寄存器操作
命令 | 参数 | 示例 | 备注 |
---|---|---|---|
env | None | env | 显示当前KDB的环境变量 |
set | count | set MDCOUNT=1 | 设置KDB环境变量 |
help | help | 显示当前KDB帮助文档 | |
cpu | cpunum | cpu 15 | 切换到cpu15 |
ps | flags | ps | 显示当前的活动的进程。包括pid、父进程pid、CPU号、当前状态,以及对应的线程,命令源! |
pid | pidnum | pid 483 | 切换到483号进程 |
lsmod | None | lsmod | 查看当前系统加载过的驱动模块 |
reboot | None | reboot | 重启 |
rd | c/u/d | rd | 显示所有进入kdb调试器时该点所设置的所有通用寄存器的值 |
rm | reg contents | rm | 修改寄存器 |
ef | vaddr | ef | 显示异常帧 |
f.反汇编命令
命令 | 参数 | 示例 | 备注 |
---|---|---|---|
id | vaddr | id 0xffffffffc0267cd8 | 反汇编当前地址 |
4、调试小技巧
5、Q & A
1、有没有键盘快捷键可以直接进入KDB?
有. CTRL + Break..
2、
By: Keven - 点滴积累
内核调试番外篇 - KDB的介绍与简单使用相关推荐
- [uboot] (番外篇)uboot之fdt介绍
以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为例 [uboot] uboot流程系列: [project X] tiny210(s5pv210)上电启动流程( ...
- 【转】动态模型及其求解介绍–番外篇
上一篇文章(中篇)里 面,我用的示意图是因子图,而里面也出现了Psi函数,本来应该当时就解释清楚的,但实在没有精力写那么多东西,所以就想放到下篇讲的.后来发现,讲条件 随机场要结合有向无向图和inde ...
- iOS冰与火之歌番外篇 - 在非越狱手机上进行App Hook(转载)
作者简介:郑旻(花名蒸米),阿里巴巴移动安全部门资深安全工程师,香港中文大学移动安全(Android & iOS)方向博士,曾在腾讯.百度以及硅谷的FireEye实习.在博士期间发表了多篇移动 ...
- iOS冰与火之歌番外篇 - 在非越狱手机上进行App Hook
作者简介:郑旻(花名蒸米),阿里巴巴移动安全部门资深安全工程师,香港中文大学移动安全(Android & iOS)方向博士,曾在腾讯.百度以及硅谷的FireEye实习.在博士期间发表了多篇移动 ...
- 浅析android手游lua脚本的加密与解密(番外篇之反编译的对抗)
前言 去年在看雪论坛写了一篇<浅析android手游lua脚本的加密与解密>的精华文章,今年写一篇番外篇,将一些lua反编译对抗的内容整合一起,并以3个实例作为说明(包括2018腾讯游 ...
- 你所能用到的数据结构之番外篇---逆袭的面向对象(一)
对于番外篇,我深刻能明白在大多数人眼里就和电视剧的广告一样,说实话,我也不喜欢这种感觉,因为这样会让人觉得是在欺骗消费者啊~~~阿西巴~~~但是我实在发现如果不在这里对面向对象来个入门级的介绍,后面的 ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV
转载自:https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程:给深度学习入门者的Python快速教程 - 基础篇 给深度学习入门者的Python快速教程 - ...
- 【梅哥的Ring0湿润插入教程】【番外篇四】抓取盛大GPK驱动保护文件及简略逆向...
[梅哥的Ring0湿润插入教程] Email:mlkui@163.com 转载请注明出处,谢绝喷子记者等,如引起各类不适请自觉滚J8蛋! 番外篇四:抓取盛大GPK驱动保护文件及简略逆向 [湿润前言] ...
最新文章
- Single Shot Multibox Detection (SSD)实战(上)
- linux node 文件存放目录_Linux文件与目录结构
- 版本变迁_一本书遍览古今中外红楼梦版本变迁
- 看雪学院课程《汇编语言详解与二进制漏洞初阶》笔记
- CVPR 2016 SINT:《Siamese Instance Search for Tracking》论文笔记
- SpringBoot 中 @RequestBody的正确使用方法
- pip指定源安装_几种python安装简单方法
- 网络流量统计using ADB
- 【分享】北漂五年,创业、字节、和阿里,现在回家
- 单细胞测序流程(二)数据整理
- CDN:BootCDN
- 2022Mothercup建模比赛
- 还在使用BeanUtils.copyProperties()? 来看看MapStruct,强大五倍
- shp、tif文件坐标系转换
- Python异步: 什么时候使用异步?(3)
- 第7章 分析恶意的windows程序
- 创建新Docker容器时出现“The container name “/xxx“ is already in use by container xxxxxxxxxxx...”问题的解决办法
- java导出csv小程序_微信小程序——使用excel-export导出excel
- 暴风播酷云二期J3455 DS918 1.04b引导6.23完美群晖教程,可硬洗,正常开关机、WOL
- 计算机没有开启还原的功能,怎么打开电脑的系统还原功能