2017-07-08 2 views
2

Supposons que je démontage de 4 instructions à partir de l'adresse 0x809fff00:Comment taper des instructions de mémoire/opcodes correctement pour l'écriture/modifier l'adresse de la mémoire lors du débogage de noyau dans 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 

et je veux modifier le 0x809fff00 d'adresse avec les opcodes 01 02 03 04 avec petit boutiste. Comment devrais-je le faire?

Par exemple, dans C, je voudrais faire comme: adresse 0x809fff00 = "\ x04 \ x03 \ x02 \ 01"

Comment faire avec set commande en GDB?

Répondre

2

Puisque vous connaissez déjà les opcodes, c'est plutôt simple. Vous utilisez simplement set pour définir les octets que vous voulez à cette adresse. Le seul truc est que vous voulez définir 4 octets à la fois, donc vous devrez indiquer set pour traiter l'adresse comme un pointeur vers un DWORD. Vous pouvez le faire avec un casting de style C:

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

(Ceci, évidemment, suppose qu'un unsigned int est un type de 4 octets sur votre plate-forme Si ce n'est pas, changer le cas échéant.).

+0

En fait, j'ai essayé exactement la même chose avec la différence de ne pas taper unsigned int. – ot0