在 GDB 中调试内核时如何为 writing/modifying 内存地址正确键入内存 instructions/opcodes

How to type memory instructions/opcodes properly for writing/modifying memory address while debugging kernel in GDB

假设我从地址 0x809fff00:

开始反汇编 4 条指令
(gdb) disas /r 0x809fff00, +0x10
Dump of assembler code from 0x809fff00 to 0x809fff10:
   0x809fff00:  00 35 0c 00 sll a2,t4,0x14
   0x809fff04:  00 00 00 00 nop
   0x809fff08:  00 00 00 00 nop
   0x809fff0c:  00 00 00 00 nop

我想修改地址 0x809fff00,操作码为 01 02 03 04,小端。我应该怎么做?

例如在 C 中,我会这样做: 地址 0x809fff00 = “\x04\x03\x02”

如何在 GDB 中使用 set 命令?

既然你已经知道了操作码,那就很简单了。您只需使用 set 在该地址设置您想要的任何字节。唯一的技巧是您希望一次设置 4 个字节,因此您需要指示 set 将地址视为指向 DWORD 的指针。您可以使用 C 风格的转换来做到这一点:

set *(unsigned int*)0x809fff10 = 0x04030201

(显然,这假设 unsigned int 在您的平台上是 4 字节类型。如果不是,请适当更改它。)