Ho un programma che devo applicare con il GDB. Il problema è che esiste una riga di codice che effettua un" test minore o uguale "e non riesce a causare il programma per finire con un errore di segmentazione.Il programma è già compilato e non ho la sorgente quindi non posso cambiare il codice sorgente ovviamente.Tuttavia, usando GDB, sono stato in grado di individuare dove è stato eseguito il test < = e poi sono riuscito per individuare l'indirizzo di memoria che potete vedere qui sotto.Patching GDB restituisce "Impossibile accedere alla memoria all'indirizzo 0x
(gdb) x/100i $pc
... removed extra lines ...
0x7ffff7acb377: jle 0x7ffff7acb3b1
....
Tutto quello che devo fare è cambiare il test ad una 'maggiore o uguale a' test e quindi il programma dovrebbe funzionare bene. il codice operativo per JLE è 0x7e e ho bisogno di cambiarlo in 0x7d. Il mio assig nment fornisce le istruzioni su come fare questo nel modo seguente:
$ gdb -write -q programtomodify
(gdb) set {unsigned char} 0x8040856f = 0x7d
(gdb) quit
Quindi cerco e ottenere ...
$ gdb -write -q player
(gdb) set {unsigned char} 0x7ffff7acb377 = 0x7d
Cannot access memory at address 0x7ffff7acb377
Ho provato vari altri indirizzi di memoria e non importa quello che cerco io ottenere il stessa risposta. Questo è il mio unico problema, non mi interessa se è l'indirizzo sbagliato o l'istruzione di codice errato a questo punto, voglio solo essere in grado di modificare la memoria.
Sono in esecuzione di Linux Mint 14 tramite VMware Player
Grazie
puoi farlo anche in qualsiasi altro editor esadecimale (ma gli indirizzi funzionano in modo un po 'diverso in gdb) – Blauhirn