Je sais que nous pouvons utiliser plusieurs commandes pour accéder et lire la mémoire: par exemple, print, p, x ...
Mais comment puis-je modifier le contenu de la mémoire à un emplacement spécifique (lors du débogage dans GDB)?
Je sais que nous pouvons utiliser plusieurs commandes pour accéder et lire la mémoire: par exemple, print, p, x ...
Mais comment puis-je modifier le contenu de la mémoire à un emplacement spécifique (lors du débogage dans GDB)?
Réponses:
Le plus simple est de définir une variable de programme (voir GDB: affectation ):
(gdb) l
6 {
7 int i;
8 struct file *f, *ftmp;
9
(gdb) set variable i = 10
(gdb) p i
$1 = 10
Ou vous pouvez simplement mettre à jour l'emplacement arbitraire (inscriptible) par adresse:
(gdb) set {int}0x83040 = 4
Il y a plus. Lisez le manuel .
set (str[6]) = 'c'
fonctionne, au cas où vous auriez un tableau, commechar str[]
Comme Nikolai l'a dit, vous pouvez utiliser la commande gdb 'set' pour changer la valeur d'une variable.
Vous pouvez également utiliser la commande «set» pour modifier les emplacements de mémoire. par exemple. Expansion sur l'exemple de Nikolai:
(gdb) l
6 {
7 int i;
8 struct file *f, *ftmp;
9
(gdb) set variable i = 10
(gdb) p i
$1 = 10
(gdb) p &i
$2 = (int *) 0xbfbb0000
(gdb) set *((int *) 0xbfbb0000) = 20
(gdb) p i
$3 = 20
Cela devrait fonctionner pour tout pointeur valide et peut être converti en n'importe quel type de données approprié.
set {char[100]}(0x00) = ""
Efface 100 octets de mémoire à l'adresse 0x00
Développant les réponses fournies ici.
Vous pouvez simplement set idx = 1
définir une variable, mais cette syntaxe n'est pas recommandée car le nom de la variable peut entrer en conflit avec une sous-commande set. À titre d'exemple set w=1
ne serait pas valide.
Cela signifie que vous devriez préférer la syntaxe: set variable idx = 1
ou set var idx = 1
.
Enfin, vous pouvez simplement utiliser votre ancienne commande d'impression fidèle, car elle évalue une expression. La seule différence étant qu'il imprime également le résultat de l'expression.
(gdb) p idx = 1
$1 = 1
Vous pouvez en savoir plus sur gdb ici .