web-dev-qa-db-ja.com

GDBでレジスタ値を印刷する方法は?

%eaxおよび%ebpの値を印刷するにはどうすればよいですか?

(gdb) p $eax
$1 = void
166
assem

info registersはすべてのレジスタを表示します。 info registers eaxは、レジスタeaxのみを表示します。コマンドはi rと短縮できます。

196
geekosaur

GDBの特定のレジスターを印刷する場合は、%記号を省略する必要があります。例えば、

info registers eip

実行可能ファイルが64ビットの場合、レジスタはrで始まります。 eで開始することは無効です。

info registers rip

これらは次のように短縮できます。

i r rip
47
Bridgette

もあります:

info all-registers

次に、興味のあるレジスタ名を取得できます。プラットフォーム固有のレジスタ(ARMのNEON Q ...など)を見つけるのに非常に便利です。

35
yano
  • 一度だけ確認したい場合は、info registersがレジスタを表示します。
  • たとえば、1つのレジスタのみを監視する場合、display $esp continueはgdbコマンドラインにespレジスタを表示します。
  • すべてのレジスタを監視する場合、layout regsはTUIモードでレジスタの表示を続行します。
11
liuyang1

Gdbコマンド

  • i r <register_name>:単一のレジスターを出力します、例:i r raxi 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*)を出力します

aall)およびffloat)以外のレジスタグループは、次のもので見つけることができます。

maint print reggroups

https://sourceware.org/gdb/current/onlinedocs/gdb/Registers.html#Registers

ヒント

  • xmm0xmm15は128ビットで、ほとんどすべての最新のマシンに搭載されており、1999年にリリースされました。
  • ymm0ymm15は256ビットで、新しいマシンには通常それがあり、2011年にリリースされます。
  • zmm0zmm31は512ビットで、通常のPCにはおそらくない(2016年)。2013年にリリースされ、主にサーバーで使用されています。
  • 異なるモードでは同じレジスタであるため、xmm/ymm/zmmの1つのシリアルのみが表示されます。私のマシンではymmが表示されます。
8
Eric Wang

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つでない限り、「$」が前に付いた名前はすべて、便利な変数に使用できます。

および

式で、マシンレジスタの内容を、「$」で始まる名前の変数として参照できます。レジスタの名前はマシンごとに異なります。情報レジスタを使用して、マシンで使用されている名前を確認します。

しかし、私はこれまでのところ制御レジスタにそれほど運がありませんでした:OSDev 2012 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#2062