답변:
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
에서 워드 프로세서 :
사전 정의 된 머신 특정 레지스터 이름 중 하나가 아닌 경우 '$'가 앞에 오는 모든 이름을 편의 변수로 사용할 수 있습니다.
그리고 :
표현식에서 기계 레지스터 내용을 '$'로 시작하는 이름을 가진 변수로 참조 할 수 있습니다. 레지스터 이름은 기계마다 다릅니다. 정보 레지스터를 사용하여 컴퓨터에서 사용 된 이름을 봅니다.
그러나 지금까지 제어 레지스터는 그리 운이 없었습니다. 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 부동 소수점 레지스터
참조 : /reverseengineering/8992/floating-point-registers-on-arm/20623#20623
$
구문 을 사용하여 표현식에서 레지스터를 사용할 수있는 것이 좋습니다 .
layout reg
이전 명령에 의해 변경 사람 (들)을 강조, 모든 정수 플래그 레지스터의 테이블을 보여 GDB해야합니다. 예를 들어 stackoverflow.com/tags/x86/info 를 참조하십시오 .