Come modificare il contenuto della memoria utilizzando GDB?


Risposte:


124

Il modo più semplice è impostare una variabile di programma (vedi GDB: assegnazione ):

Oppure puoi semplicemente aggiornare la posizione arbitraria (scrivibile) per indirizzo:

C'è più. Leggi il manuale .


4
Devo impostare una variabile di programma PRIMA di accedere a posizioni di memoria arbitrarie? Non posso eseguire subito il secondo comando set?
Spidey

inoltre, set (str[6]) = 'c'funziona, nel caso tu abbia un array, comechar str[]
xealits

30

Come ha detto Nikolai, puoi usare il comando gdb 'set' per modificare il valore di una variabile.

È inoltre possibile utilizzare il comando "set" per modificare le posizioni di memoria. per esempio. Espandendo l'esempio di Nikolai:

Questo dovrebbe funzionare per qualsiasi puntatore valido e può essere eseguito il cast a qualsiasi tipo di dati appropriato.


set {char[100]}(0x00) = "" Cancella 100 byte di memoria all'indirizzo 0x00
davenpcj

16

Espandendo le risposte fornite qui.

Puoi semplicemente set idx = 1impostare una variabile, ma questa sintassi non è consigliata perché il nome della variabile potrebbe essere in conflitto con un sottocomando set. Ad esempio set w=1non sarebbe valido.

Ciò significa che dovresti preferire la sintassi: set variable idx = 1o set var idx = 1.

Ultimo ma non meno importante, puoi semplicemente usare il tuo fidato vecchio comando di stampa, poiché valuta un'espressione. L'unica differenza è che stampa anche il risultato dell'espressione.

Puoi leggere di più su gdb qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.