2012-07-21 18 views
6

Şu anda GDB'yi kullanmakta olduğum bir işlemde belirli bir değer (tamsayı sihirli sayı (654321)) bulmaya çalışıyorum. find [/sn] start_addr, +len, val1 [, val2, ...] komutunu buldum, ancak başlangıç ​​ve bitiş adresi gerektiriyor, ancak işlem belleğimin nerede başladığını ve nerede bittiğini bilmiyorum.Bir işlemin tüm belleğini gdb'de nasıl ararım?

Bu çok sık görülen bir sorun gibi görünüyor, ancak bir yıl önce bunun için googling hatırlıyorum ve şimdi hiçbir başarı ile tekrarladım, bu yüzden .. İşlem belleğinin nerede başladığını ve nerede bittiğini nereden öğrenebilirim?

cevap

4

"Tüm hafıza" fikri, modern bir süreçte karmaşıktır. Gerçekten sahip olduğunuz şey, farklı kaynaklardan birçok haritalamadır. Bunları numaralandırabilirsiniz (okuma erişimi olmadan haritalardan okumaya çalışmayın! Ayrıca, muhtemelen bazı zekayı uygulamak istersiniz, böylece paylaştığınız kütüphanelerin .text bölümlerini aramaya son vermeyin, vb ...) Çalışma zamanında /proc/$pid/maps okuma ve sonra gdb uygun komutları beslemek için bir şey komut dosyası. Dürüst olmak gerekirse, bunu yapmak için ikilide bir rutin yazmak ve sadece gdb'den yazmak en basitinden olabileceğini düşünüyorum.

+0

'/ proc/$ pid/maps' biçimini tanımlayan bir manpage var mı? –

+0

@Jonas: http://kernel.org/doc/man-pages/online/pages/man5/proc.5.html – mark4o

+0

@ mark4o Teşekkürler. Başarı olmadan "haritalar", "proc_maps" ve "procfs" den çalıştı. –

İlgili konular