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:
(gdb) l
6 {
7int i;
8structfile *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
Ini harus bekerja untuk semua penunjuk yang valid, dan dapat ditransmisikan ke tipe data yang sesuai.
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.
(gdb) p idx = 1
$1 = 1
Anda dapat membaca lebih lanjut tentang gdb di sini .
Jawaban:
Yang paling mudah adalah menyetel variabel program (lihat GDB: penugasan ):
(gdb) l 6 { 7 int i; 8 struct file *f, *ftmp; 9 (gdb) set variable i = 10 (gdb) p i $1 = 10
Atau Anda bisa memperbarui lokasi sewenang-wenang (dapat ditulis) berdasarkan alamat:
(gdb) set {int}0x83040 = 4
Masih ada lagi. Baca manualnya .
sumber
set (str[6]) = 'c'
berfungsi, jika Anda memiliki array, sepertichar str[]
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:
(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
Ini harus bekerja untuk semua penunjuk yang valid, dan dapat ditransmisikan ke tipe data yang sesuai.
sumber
set {char[100]}(0x00) = ""
Menghapus 100 byte memori di alamat 0x00Memperluas jawaban yang diberikan di sini.
Anda bisa saja melakukan
set idx = 1
untuk mengatur variabel, tetapi sintaks itu tidak disarankan karena nama variabel mungkin bentrok dengan sub-perintah yang ditetapkan. Sebagai contohset w=1
tidak akan valid.Ini berarti Anda harus memilih sintaks:
set variable idx = 1
atauset 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.
(gdb) p idx = 1 $1 = 1
Anda dapat membaca lebih lanjut tentang gdb di sini .
sumber