m , mw , md , mp , mpw 和 mpd 子命令
m (modify bytes) , mw (modify words) 和 md (modify double words) 子命令从指定的有效地址开始修改内存。 mp (modify bytes) , mpw (modify words) 和 mpd (modify double words) 子命令从指定的实际地址开始修改内存。
这些子命令仅在 KDB 内核调试器中可用。 它们不包含在 kdb 命令中。
格式
m 有效地址
mw 有效地址
md 有效地址
mp 物理地址
mpw 物理地址
mpd 物理地址
参数
| 项 | 描述 |
|---|---|
| 有效地址 | 指定要修改的起始内存区域的有效地址或虚拟地址。 可以使用符号,十六进制值或十六进制表达式来指定地址。 |
| 物理地址 | 指定要修改的起始内存区域的物理地址或实际地址。 可以使用符号,十六进制值或十六进制表达式来指定地址。 |
读或写访问权可以处于虚拟或实际方式。
这些子命令是交互式的。 每个修改都是逐个输入的。 第一个意外输入停止修改。 例如,可以使用句点 (.) 来表示数据的结尾。 如果在同一地址设置了断点,请使用 mw 子命令来保持断点一致性。
注: 不允许将符号表达式作为输入。
其他
无别名。
示例
以下是如何使用 mw 和 m 子命令来执行补丁的示例:
KDB(0)> dc @iar //print current instruction
.open+000000 mflr r0
KDB(0)> mw @iar //nop current instruction
.open+000000: 7C0802A6 = 60000000
.open+000004: 93E1FFFC = . //end of input
KDB(0)> dc @iar //print current instruction
.open+000000 ori r0,r0,0
KDB(0)> m @iar //restore current instruction byte per byte
.open+000000: 60 = 7C
.open+000001: 00 = 08
.open+000002: 00 = 02
.open+000003: 00 = A6
.open+000004: 93 = . //end of input
KDB(0)> dc @iar //print current instruction
.open+000000 mflr r0
KDB(0)> tr @iar //physical address of current instruction
Physical Address = 001C5BA0
KDB(0)> mwp 001C5BA0 //modify with physical address
001C5BA0: 7C0802A6 = <CR/LF>
001C5BA4: 93E1FFFC = <CR/LF>
001C5BA8: 90010008 = <CR/LF>
001C5BAC: 9421FF40 = 60000000
001C5BB0: 83E211C4 = . //end of input
KDB(0)> dc @iar 5 //print instructions
.open+000000 mflr r0
.open+000004 stw r31,FFFFFFFC(stkp)
.open+000008 stw r0,8(stkp)
.open+00000C ori r0,r0,0
.open+000010 lwz r31,11C4(toc) 11C4(toc)=_open$$
KDB(0)> mw open+c //restore instruction
.open+00000C: 60000000 = 9421FF40
.open+000010: 83E211C4 = . //end of input
KDB(0)> dc open+c //print instruction
.open+00000C stwu stkp,FFFFFF40(stkp)
KDB(0)>