Bagaimana cara mengubah isi memori menggunakan GDB?

87

Saya tahu bahwa kita dapat menggunakan beberapa perintah untuk mengakses dan membaca memori: misalnya, print, p, x ...

Tetapi bagaimana saya bisa mengubah isi memori di lokasi tertentu (saat debugging di GDB)?

bit
sumber
tulis string ke memori: stackoverflow.com/questions/19503057/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Jawaban:

124

Yang paling mudah adalah menyetel variabel program (lihat GDB: penugasan ):

Atau Anda bisa memperbarui lokasi sewenang-wenang (dapat ditulis) berdasarkan alamat:

Masih ada lagi. Baca manualnya .

Nikolai Fetissov
sumber
4
Saya perlu menetapkan variabel program SEBELUM mengakses lokasi memori sewenang-wenang? Tidak bisakah saya langsung menjalankan perintah set kedua?
Spidey
juga, set (str[6]) = 'c'berfungsi, jika Anda memiliki array, sepertichar str[]
xealits
30

Seperti yang dikatakan Nikolai, Anda dapat menggunakan perintah gdb 'set' untuk mengubah nilai variabel.

Anda juga dapat menggunakan perintah 'set' untuk mengubah lokasi memori. misalnya. Memperluas contoh Nikolai:

Ini harus bekerja untuk semua penunjuk yang valid, dan dapat ditransmisikan ke tipe data yang sesuai.

Andrew Edgecombe
sumber
set {char[100]}(0x00) = ""Menghapus 100 byte memori di alamat 0x00
davenpcj
16

Memperluas jawaban yang diberikan di sini.

Anda bisa saja melakukan set idx = 1untuk mengatur variabel, tetapi sintaks itu tidak disarankan karena nama variabel mungkin bentrok dengan sub-perintah yang ditetapkan. Sebagai contoh set w=1tidak akan valid.

Ini berarti Anda harus memilih sintaks: set variable idx = 1atau set var idx = 1.

Last but not least, Anda bisa menggunakan perintah print lama terpercaya Anda, karena ini mengevaluasi ekspresi. Satu-satunya perbedaan adalah dia juga mencetak hasil ekspresi.

Anda dapat membaca lebih lanjut tentang gdb di sini .

João Portela
sumber