2017-07-08 32 views
2

假设我有4个指令拆卸从地址0x809fff00开始:如何输入存储器指令/操作码正确写入/修改内存地址,而在GDB调试内核

(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 \ 01”

如何与GDB set命令做呢?

回答

2

由于您已经知道操作码,所以非常简单。您只需使用set即可在该地址设置所需的任何字节。唯一的技巧是你想一次设置4个字节,所以你需要指示set把地址作为指向DWORD的指针。您可以使用C样式转换做到这一点:

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

(显然,这假设的unsigned int是你的平台上的4个字节的类型如果不是,将其更改为适当。)

+0

我其实没有输入无符号整数的区别。 – ot0