Programing

GDB에서 레지스터 값을 인쇄하는 방법은 무엇입니까?

crosscheck 2020. 5. 23. 10:13
반응형

GDB에서 레지스터 값을 인쇄하는 방법은 무엇입니까?


%eax의 값을 어떻게 인쇄 %ebp합니까?

(gdb) p $eax
$1 = void

info registers모든 레지스터를 보여줍니다. info registers eax레지스터 만 표시합니다 eax. 이 명령은 다음과 같이 축약 될 수 있습니다i r


GDB에서 특정 레지스터를 인쇄하려는 경우 % 기호를 생략해야합니다. 예를 들어

info registers eip

실행 파일이 64 비트이면 레지스터는 r로 시작합니다. e로 시작하는 것은 유효하지 않습니다.

info registers rip

그것들은 다음과 같이 축약 될 수 있습니다 :

i r rip

도 있습니다:

info all-registers

그러면 원하는 레지스터 이름을 얻을 수 있습니다. ARM의 NEON Q ...와 같은 플랫폼 별 레지스터를 찾는 데 매우 유용합니다.


  • 한 번만 확인하려면 info registers레지스터를 표시하십시오.
  • 예를 들어 하나의 레지스터 만 감시하려면 display $espgdb 명령 행에 esp 레지스터를 계속 표시하십시오.
  • 모든 레지스터를보고 싶다면 layout regsTUI 모드로 계속해서 레지스터를 표시하십시오.

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 년에 출시되어 주로 서버에서 사용됩니다.
  • xmm / ymm / zmm의 직렬은 서로 다른 모드에서 동일한 레지스터이기 때문에 하나만 표시됩니다. 내 컴퓨터에는 ymm이 표시됩니다.

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 부동 소수점 레지스터

참조 : https://reverseengineering.stackexchange.com/questions/8992/floating-point-registers-on-arm/20623#20623

참고 URL : https://stackoverflow.com/questions/5429137/how-to-print-register-values-in-gdb

반응형