如何通过GDB + KGDB从LOCAL机器上破坏远程调试的Linux内核?

问题描述 投票:0回答:2

我正在通过GDB + KGDB +两个虚拟机+串口调试Linux内核。

如果我们使用GDB来调试一个普通的程序,我们只需按Ctrl+C即可中断程序的执行。

但是,当我将 GDB 连接到远程 KGDB 存根时,无论如何我都无法破坏远程计算机,除非我在 REMOTE 机器上使用以下命令:

echo g > /proc/sysrq-trigger

如何从LOCAL机器上破坏REMOTE调试的Linux内核?

linux debugging gdb remote-debugging kgdb
2个回答
0
投票

可以让现代 gdb 中断远程内核。我不知道这个选项在 2014 年最初提出这个问题时是否可用。

首先,您需要有合适的内核配置。我通常设置:

CONFIG_MAGIC_SYSRQ=y
CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1
CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE="g"

设置

CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1
启用所有sysrq代码;设置
CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE="g"
意味着为了中断调试器,我们需要发送
<break>g

配置到位后,我们就可以像这样设置 gdb

remote interrupt-sequence
序列设置:

set remote interrupt-sequence BREAK-g

现在,当您在 gdb 中输入

^C
时,gdb 将发送
BREAK
信号,然后发送
g
到远程系统,这将中断调试器。看起来像:

^C[New Thread 867]                                                                             

Thread 1 received signal SIGTRAP, Trace/breakpoint trap.
kgdb_breakpoint () at kernel/debug/debug_core.c:1221
1221            arch_kgdb_breakpoint();                                                        
(gdb) 

-1
投票

您应该在本地计算机中使用 minicom 来实现两台计算机之间的串行连接:按 Ctrl-A,然后按“F”(这是用于向远程计算机发送中断),然后发送“G”:与您上面提到的 echo 命令相同。

© www.soinside.com 2019 - 2024. All rights reserved.