回答:
info registers
すべてのレジスタを表示します。info registers eax
レジスターのみを示しますeax
。コマンドは次のように省略できますi r
info registers eax
です。ただし、これがgdbのバージョンによって異なるかどうかはわかりません。
register read [eax]
display
。たとえばdisplay $eax
。
もあります:
info all-registers
次に、関心のあるレジスタ名を取得できます-プラットフォーム固有のレジスタ(ARM上のNEON Q ...など)を見つけるのに非常に便利です。
eax
、ecx
およびその他の標準的なレジスタは、によって隠さinfo registers
。これはおそらく受け入れられる答えになるはずです。
Gdbコマンド:
i r <register_name>
:単一のレジスタを出力しますi r rax
。i r eax
i r <register_name_1> <register_name_2> ...
:複数のレジスタを出力しますi r rdi rsi
。i r
:浮動小数点およびベクトルレジスタ(xmm、ymm、zmm)を除くすべてのレジスタを出力します。i r a
:すべてのレジスタを印刷し、浮動小数点とベクトルレジスタ(xmm、ymm、zmm)を含めます。i r f
:すべてのFPU浮動レジスター(st0-7
およびその他いくつかf*
)を出力しますa
(all
)とf
(float
)以外の他のレジスタグループは、次のようにして見つけることができます。
maint print reggroups
次のドキュメントに記載されています:https : //sourceware.org/gdb/current/onlinedocs/gdb/Registers.html#Registers
ヒント:
xmm0
〜 xmm15
は128ビットで、ほとんどすべての現代のマシンに搭載されており、1999年にリリースされました。ymm0
〜ymm15
は256ビットで、新しいマシンには通常それがあり、2011年にリリースされます。zmm0
〜zmm31
は512ビットで、通常のPCにはおそらく(2016年のように)ありません。2013年にリリースされ、主にこれまでサーバーで使用されていました。p $eax
GDB 7.7.1以降で動作
GDB 7.7.1以降、試行したコマンドは機能します。
set $eax = 0
p $eax
# $1 = 0
set $eax = 1
p $eax
# $2 = 1
この構文は、たとえば、浮動小数点または整数のいずれかであるARM浮動小数点レジスタの場合、さまざまな共用体メンバー間での選択にも使用できます。
p $s0.f
p $s0.u
ドキュメントから:
「$」が前に付いている名前は、事前定義されたマシン固有のレジスタ名の1つでない限り、便利な変数として使用できます。
と:
マシンレジスタの内容は、式で、 '$'で始まる名前の変数として参照できます。レジスタの名前はマシンごとに異なります。情報レジスタを使用して、マシンで使用されている名前を確認します。
しかし、私はこれまでのところ、制御レジスターにはあまり運がありません。OSDev2012 http://f.osdev.org/viewtopic.php?f=1&t=25968 || 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
ARM浮動小数点レジスタ
参照:https : //reverseengineering.stackexchange.com/questions/8992/floating-point-registers-on-arm/20623#20623
$
構文の式でレジスタを使用できるのは素晴らしいことです。
layout reg
gdbにすべての整数レジスタとフラグレジスタのテーブルを表示させ、前の命令によって変更されたレジスタを強調表示するために使用します。たとえば、stackoverflow.com / tags / x86 / infoを参照してください。