मैं %eax
और %ebp
का मूल्य कैसे प्रिंट करूं?कैसे GDB में रजिस्टर मूल्यों मुद्रित करने के लिए?
(gdb) p $eax
$1 = void
मैं %eax
और %ebp
का मूल्य कैसे प्रिंट करूं?कैसे GDB में रजिस्टर मूल्यों मुद्रित करने के लिए?
(gdb) p $eax
$1 = void
info registers
सभी रजिस्टरों पता चलता है; info registers eax
शो सिर्फ रजिस्टर eax
। आप GDB में एक विशिष्ट रजिस्टर मुद्रित करने के लिए प्रयास कर रहे हैं आदेश के रूप में i r
मुझे मिलता है: अमान्य रजिस्टर '% eax ' और यदि मैं बस" जानकारी पंजीयक "करता हूं तो ईएक्स दिखाई नहीं देता है। फिर भी मैं आईडीई में अपनी कोड असेंबली देख रहा हूं जहां एक EXC_BAD_ACCESS सिग्नल निर्देश के साथ उत्पन्न किया गया है: परीक्षण% eax,% eax यह एक्सकोड चल रहा है gdb। जीडीबी ईएक्स रजिस्टर की रिपोर्ट क्यों नहीं कर रहा है? – NoahR
वही समस्या:% ईएक्स कोड में है, फिर भी $ eax शो शून्य प्रिंट करें। –
ब्रिजेटे का जवाब मेरे लिए काम करता है। geekosaur का जवाब अधिकतर सही है, लेकिन आपको% साइन को छोड़ना होगा, इसलिए किसी विशिष्ट रजिस्टर के लिए आदेश 'जानकारी रजिस्ट्रार eax' है। मुझे यकीन नहीं है कि यह जीडीबी के विभिन्न संस्करणों के लिए अलग है, हालांकि। – Kevin
संक्षिप्त किया जा सकता है, तो आप% चिह्न छोड़ दिया है। उदाहरण के लिए,
info registers eip
यदि आपका निष्पादन योग्य 64 बिट है, तो पंजीयक आर के साथ शुरू होते हैं। ई के साथ शुरू करना मान्य नहीं है।
info registers rip
उन को संक्षिप्त जा सकता है:
i r rip
वहाँ भी है:
info all-registers
तो फिर तुम रजिस्टर नाम प्राप्त कर सकते हैं आप में रुचि रखते हैं - platform- खोजने के लिए बहुत उपयोगी विशिष्ट रजिस्ट्रार (जैसे एनईओएन क्यू ... एआरएम पर)।
यह उन रजिस्टरों के बारे में सिखाया गया है जिन्हें मैं अस्तित्व में नहीं जानता था :-) –
मेरी मशीन पर, यह प्रिंट 'eax', 'ecx', और' रजिस्ट्रार रजिस्टर्स 'द्वारा छिपा अन्य मानक रजिस्ट्रार। यह शायद स्वीकार्य उत्तर होना चाहिए। – EntangledLoops
GDB 7.7.1 के रूप में, आदेश आप की कोशिश की है काम करता है:
set $eax = 0
p $eax
# $1 = 0
set $eax = 1
p $eax
# $2 = 1
the docs से:
किसी भी नाम '$' से पहले एक सुविधा चर के लिए इस्तेमाल किया जा सकता, जब तक कि यह पूर्वनिर्धारित मशीन-विशिष्ट रजिस्टर नामों में से एक न हो।
and:
आप भाव में, '$' के साथ शुरू नाम के साथ चर के रूप में मशीन रजिस्टर सामग्री देख सकते हैं। प्रत्येक मशीन के लिए रजिस्टरों के नाम अलग हैं; अपनी मशीन पर इस्तेमाल किए गए नाम देखने के लिए जानकारी रजिस्टरों का उपयोग करें।
लेकिन मुझे अभी तक नियंत्रण रजिस्टरों के साथ बहुत भाग्य नहीं मिला है: ओएसडीव 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
info registers
शो रजिस्टरों।display $esp
जारी रखने के gdb कमांड लाइन में प्रदर्शन esp रजिस्टरों।layout regs
शो रजिस्टर, TUI मोड के साथ जारी है।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) शामिल करें।
टिप्स:
xmm0
~ xmm15
, 128 बिट, लगभग हर आधुनिक मशीन यह, वे 1999ymm0
~ ymm15
में जारी किया जाता है है, 256 बिट्स, नया कर रहे हैं मशीन आमतौर पर यह होती है, उन्हें 2011 में रिलीज़ किया जाता है।zmm0
~ zmm31
, 512 बिट्स, सामान्य पीसी शायद यह 2016 (वर्ष 2016) के रूप में नहीं है, वे 2013 में जारी किए जाते हैं, और मुख्य रूप से अब तक सर्वरों में उपयोग किए जाते हैं।
जीडीबी को सभी पूर्णांक और ध्वज रजिस्टरों की एक तालिका दिखाने के लिए 'लेआउट reg' का उपयोग करें, जो पिछले निर्देश द्वारा बदला गया एक (ओं) को हाइलाइट करता है। उदाहरण के लिए http://stackoverflow.com/tags/x86/info देखें। –