GDB'de kayıt değerleri nasıl yazdırılır?


Yanıtlar:


232

info registerstüm kayıtları gösterir; info registers eaxsadece kaydı gösterir eax. Komut şu şekilde kısaltılabiliri r


Anlıyorum: Geçersiz kayıt `% eax 'Ve eğer sadece" bilgi kayıtları "yaparsam eax görünmüyor. Yine de bir EXC_BAD_ACCESS sinyal talimat ile oluşturulan IDE kod derleme bakıyorum: test% eax,% eax Bu XCode gdb çalışan. GDB neden eax kaydını bildirmiyor?
— NoahR

1
Aynı sorun:% eax kodda, ancak yazdırma $ eax geçersiz olduğunu gösterir.
— Ruslan Yushchenko

5
Bridgette'nin cevabı benim için çalışıyor. geekosaur'un cevabı çoğunlukla doğrudur, ancak% işaretini atlamanız gerekir, bu nedenle belirli bir kayıt için komut info registers eax. Gerçi bunun farklı gdb sürümleri için farklı olup olmadığından emin değilim.
— Kevin

Aynı şeyi lldb için arıyordum, bu yüzden şunu not edeyim: lldb için komutregister read [eax]
— holgac

Kodda adım adım ilerlerken kayıt değerlerini sürekli olarak görüntülemek istiyorsanız kullanabilirsiniz display. Örneğin display $eax.
— srgsanky

50

GDB'de belirli bir kaydı yazdırmaya çalışıyorsanız,% işaretini atlamanız gerekir. Örneğin,

info registers eip

Yürütülebilir dosya 64 bit ise, kayıtlar r ile başlar. Bunları e ile başlatmak geçerli değildir.

info registers rip

Bunlar kısaltılabilir:

i r rip

37

Ayrıca birde şu var:

info all-registers

Daha sonra ilgilendiğiniz kayıt adını alabilirsiniz - platforma özgü kayıtları bulmak için çok yararlıdır (ARM'de NEON Q ... gibi).


3
Bu var olduğunu bilmediğim kayıtlar hakkında öğretildi :-)
— Ciro Santilli 郝海东 病 病 六四 事件 法轮功

1
Benim makinede bu baskılar eax, ecxve diğer standart kayıtlar tarafından gizlenmiş info registers. Bu muhtemelen kabul edilen cevap olmalıdır.
— EntangledLoops

15
  • Sadece bir kez kontrol etmek istiyorsanız, info registerskayıtları göster.
  • Örneğin, yalnızca bir kaydı izlemek istiyorsanız display $esp, gdb komut satırında esp kayıtlarını görüntülemeye devam edin.
  • İsterseniz tüm kayıtları izleyin layout regs, TUI modu ile kayıtları göstermeye devam edin.

12

GDB komutları :

  • i r <register_name>: tek bir kayıt yazdırın, ör i r rax.i r eax
  • i r <register_name_1> <register_name_2> ...: birden çok kayıt yazdırın, ör i r rdi rsi.
  • i r: kayan nokta ve vektör kaydı (xmm, ymm, zmm) hariç tüm kayıtları yazdırın.
  • i r a: tüm kayıtları yazdır, kayan nokta ve vektör kaydını dahil et (xmm, ymm, zmm).
  • i r f: tüm FPU kayan kayıtlarını ( st0-7ve birkaçını f*) yazdırın

a( all) Ve f( float) dışındaki diğer kayıt grupları şununla bulunabilir:

maint print reggroups

belgelendiği gibi: https://sourceware.org/gdb/current/onlinedocs/gdb/Registers.html#Registers

İpuçları :

  • xmm0~ xmm15, 128 bit, hemen hemen her modern makine var, 1999 yılında piyasaya sürüldü.
  • ymm0~ ymm15, 256 bit, yeni makine genellikle var, 2011 yılında piyasaya sürüldü.
  • zmm0~ zmm31, 512 bit, normal pc muhtemelen yok ( 2016 yılı olarak ), 2013 yılında piyasaya sürüldü ve çoğunlukla şu ana kadar sunucularda kullanılıyor.
  • Sadece bir xmm / ymm / zmm dizisi gösterilecektir, çünkü bunlar farklı modda aynı kayıtlardır. Makinemde ymm gösterilir.

6

p $eax GDB 7.7.1 itibariyle çalışır

GDB 7.7.1'den itibaren denediğiniz komut çalışır:

set $eax = 0
p $eax
# $1 = 0
set $eax = 1
p $eax
# $2 = 1

Bu sözdizimi, örneğin kayan nokta veya tamsayı olabilen ARM kayan nokta kayıtları için farklı birleşim üyeleri arasında seçim yapmak için de kullanılabilir:

p $s0.f
p $s0.u

Gönderen docs :

Önceden tanımlanmış makineye özgü kayıt adlarından biri olmadıkça, '$' ile başlayan herhangi bir ad, kolaylık değişkeni için kullanılabilir.

ve :

Makine kaydı içeriklerine, ifadelerde '$' ile başlayan isimleri olan değişkenler olarak başvurabilirsiniz. Kayıtların adları her makine için farklıdır; makinenizde kullanılan adları görmek için bilgi kayıtlarını kullanın.

Ancak şimdiye kadar kontrol kayıtları konusunda fazla şansım olmadı: OSDev 2012 http://f.osdev.org/viewtopic.php?f=1&t=25968 || 2005 özellik isteği 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 kayan nokta kayıtları

Bkz. Https://reverseengineering.stackexchange.com/questions/8992/floating-point-registers-on-arm/20623#20623


2
Kayıtları bu $sözdizimiyle ifadelerde kullanmak harika .
— remcycles
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.