Bagaimana cara mencetak nilai %eax
dan %ebp
?
(gdb) p $eax
$1 = void
gdb
cpu-registers
Assem
sumber
sumber
layout reg
agar gdb memperlihatkan tabel semua register integer dan flag, dengan menyoroti yang diubah oleh instruksi sebelumnya. Lihat stackoverflow.com/tags/x86/info misalnya.Jawaban:
info registers
memperlihatkan semua register;info registers eax
hanya menunjukkan registereax
. Perintah dapat disingkati r
sumber
info registers eax
. Saya tidak yakin apakah ini berbeda untuk versi gdb yang berbeda.register read [eax]
display
. Untuk misalnyadisplay $eax
.Jika Anda mencoba mencetak register tertentu di GDB, Anda harus menghilangkan tanda%. Sebagai contoh,
Jika executable Anda adalah 64 bit, register mulai dengan r. Memulainya dengan e tidak valid.
Itu bisa disingkat menjadi:
sumber
Ada juga:
Kemudian Anda bisa mendapatkan nama register yang Anda minati - sangat berguna untuk menemukan register spesifik platform (seperti NEON Q ... di ARM).
sumber
eax
,ecx
dan register standar lainnya disembunyikan olehinfo registers
. Ini mungkin jawaban yang diterima.info registers
perlihatkan register.display $esp
lanjutkan tampilan register esp di baris perintah gdb.layout regs
lanjutkan tampilkan register, dengan mode TUI.sumber
Perintah Gdb :
i r <register_name>
: cetak satu register, misalnyai r rax
,i r eax
i r <register_name_1> <register_name_2> ...
: cetak beberapa register, misalnyai r rdi rsi
,i r
: cetak semua register kecuali register titik mengambang & vektor (xmm, ymm, zmm).i r a
: cetak semua register, sertakan floating point & vector register (xmm, ymm, zmm).i r f
: cetak semua register mengambang FPU (st0-7
dan beberapa lainnyaf*
)Grup register lain selain
a
(all
) danf
(float
) dapat ditemukan dengan:sebagaimana didokumentasikan di: https://sourceware.org/gdb/current/onlinedocs/gdb/Registers.html#Registers
Kiat :
xmm0
~xmm15
, 128 bit, hampir setiap mesin modern memilikinya, dirilis pada tahun 1999.ymm0
~ymm15
, 256 bit, mesin baru biasanya memilikinya, mereka dirilis pada 2011.zmm0
~zmm31
, adalah 512 bit, pc normal mungkin tidak memilikinya ( seperti tahun 2016 ), mereka dirilis pada 2013, dan terutama digunakan di server sejauh ini.sumber
p $eax
bekerja pada GDB 7.7.1Pada GDB 7.7.1, perintah yang Anda coba berfungsi:
Sintaks ini juga dapat digunakan untuk memilih antara anggota serikat yang berbeda misalnya untuk register titik mengambang ARM yang dapat berupa titik mengambang atau bilangan bulat:
Dari dokumen :
dan :
Tapi sejauh ini saya belum beruntung dengan register kontrol: OSDev 2012 http://f.osdev.org/viewtopic.php?f=1&t=25968 || Permintaan fitur 2005 https://www.sourceware.org/ml/gdb/2005-03/msg00158.html || alt.lang.asm 2013 https://groups.google.com/forum/#!topic/alt.lang.asm/JC7YS3Wu31I
Register floating point ARM
Lihat: /reverseengineering/8992/floating-point-registers-on-arm/20623#20623
sumber
$
sintaks .