首页
社区
课程
招聘
[原创]Linux kernel debug设计浅析
发表于: 2019-7-10 15:26 5498

[原创]Linux kernel debug设计浅析

2019-7-10 15:26
5498

linux版本5.2.0-rc4

启动后效果如下:


图1

得到一个可以交互的kernel debug。这里是kdb的命令行,并不是kgdb的部分。后面会说明它们之间的关系。

此在在调试端按ctrl+ c 中断,看到此时kdb的栈回溯。


图2

图2看到kdb是从一个int3中断进入的。分析参数后发现是kgdbwait参数最后调用kgdb_breakpoint()也就是int 3的原因。


图3

从int3中断向上找关键函数。发现kgdb_cpu_enter()是kdb的入口。重启虚拟机对kgdb_cpu_enter()下断点。发现kgdb_cpu_enter()并不是中断一次


图4

这次是从nmi中断进入的。也就是还有代码给cpu发送了一个nmi导致。最后找到是kgdb_cpu_enter()发送的nmi中断。


图5

代码给了解释。原来是int3中断只能让一个核进入kdb。对于多核系统仅让一个核进入kdb其他核正常运行显然不合理,所以要让所有核都进入kdb。kgdb_cpu_enter()--->kdb_stub()--->kdb_main_loop()--->kdb_parse ()执行1054行对应每个命令的处理函数


图6

各个命令注册的处理函数如下


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 5
支持
分享
最新回复 (3)
雪    币: 5194
活跃值: (9722)
能力值: ( LV9,RANK:181 )
在线值:
发帖
回帖
粉丝
2
如果有bzImage ,没有原代码,有办法对它进行patch吗 ? 
大致的想的思路:
1, 通过vmlinux-extract 获取vmlinux;
2, 修改vmlinux;
3, 使用vmlinux和bzImage 来重建新的bzImage 。
不过发现网上没有这么干的,而且我试了也没有成功,在第三步的时候,进行vmlinux再压缩的时候,文件大小不一样,生成的bzImage也不能用,从文件组成里提到vmlinux压缩后,是在piggy.o的数据段内,不知道是不是解压的时候,破坏了格式。
2019-7-11 19:19
0
雪    币: 770
活跃值: (263)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
3
你可以利用QEMU调试一下重建的bzImage。找找问题
2019-7-11 20:23
0
雪    币: 5194
活跃值: (9722)
能力值: ( LV9,RANK:181 )
在线值:
发帖
回帖
粉丝
4
linuxfuns 你可以利用QEMU调试一下重建的bzImage。找找问题
嗯,IDA+VMWare试试。
2019-7-12 09:22
0
游客
登录 | 注册 方可回帖
返回
//