Bagaimana seseorang bisa melihat konten tumpukan dengan GDB?

106

Saya baru mengenal GDB, jadi saya punya beberapa pertanyaan:

  • Bagaimana cara melihat konten tumpukan? Contoh: untuk melihat isi register, saya ketik info registers. Untuk tumpukan, apa yang seharusnya?

  • Bagaimana saya bisa melihat konten $0x4(%esp)? Saat saya mengetik print /d $0x4(%esp), GDB memberikan error.

Platform: Linux dan GDB

Peter Mortensen
sumber
kemungkinan duplikat Menggunakan GDB untuk memeriksa Tumpukan Mesin
Dipekerjakan dalam Bahasa Rusia

Jawaban:

124

info frame untuk menampilkan info bingkai tumpukan

Untuk membaca memori di alamat yang diberikan, Anda harus melihatnya x

x/x $espuntuk hex x/d $espuntuk ditandatangani x/u $espuntuk unsigned dll. x menggunakan sintaks format, Anda juga dapat melihat instruksi saat ini melalui x/i $eipdll.

DipSwitch
sumber
75

Menggunakan:

  • bt - lacak balik: tampilkan fungsi tumpukan dan args
  • info frame - Tunjukkan stack start / end / args / local pointers
  • x/100x $sp - tampilkan memori tumpukan
astaga
sumber
61

Anda perlu menggunakan perintah tampilan memori gdb. Yang mendasar adalah x, untuk diperiksa . Ada contoh di halaman tertaut ke yang menggunakan

untuk mencetak "empat kata ( w) memori di atas penunjuk tumpukan (di sini, $sp) dalam heksadesimal ( x)". Kutipannya sedikit diparafrasekan.

beristirahat
sumber