GDB kullanılarak bellek içeriği nasıl değiştirilir?


Yanıtlar:


124

En kolayı bir program değişkeni ayarlamaktır (bkz. GDB: atama ):

Veya isteğe bağlı (yazılabilir) konumu adrese göre güncelleyebilirsiniz:

Fazlası var. Kılavuzu okuyun .


4
Rasgele bellek konumlarına erişmeden ÖNCE bir program değişkeni ayarlamam gerekiyor mu? İkinci set komutunu hemen çalıştıramaz mıyım?
Spidey

ayrıca, set (str[6]) = 'c'bir diziniz olması durumunda çalışır, örneğinchar str[]
Eylül'de

30

Nikolai'nin dediği gibi, bir değişkenin değerini değiştirmek için gdb 'set' komutunu kullanabilirsiniz.

Bellek konumlarını değiştirmek için 'set' komutunu da kullanabilirsiniz. Örneğin. Nikolai'nin örneğini genişleterek:

Bu, herhangi bir geçerli işaretçi için çalışmalıdır ve herhangi bir uygun veri türüne dönüştürülebilir.


set {char[100]}(0x00) = ""0x00 adresindeki 100 bayt belleği temizler
davenpcj

16

Burada verilen cevapların genişletilmesi.

Sadece set idx = 1bir değişken ayarlamak için yapabilirsiniz , ancak bu sözdizimi önerilmez çünkü değişken adı bir set alt komutuyla çakışabilir. Örnek set w=1olarak geçerli olmaz.

Bu, sözdizimini tercih etmeniz gerektiği anlamına gelir: set variable idx = 1veya set var idx = 1.

Son olarak, bir ifadeyi değerlendirdiği için güvenilir eski yazdırma komutunuzu kullanabilirsiniz. Tek fark, ifadenin sonucunu da yazdırmasıdır.

Sen gdb hakkında daha fazla bilgi bulabilirsiniz burada .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.