-
-
[原创]Linux kernel debug设计浅析
-
发表于:
2019-7-10 15:26
5498
-
[原创]Linux kernel debug设计浅析
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期)