जीडीबी के साथ स्टैक की सामग्री कैसे देख सकते हैं?


94

मैं GDB के लिए नया हूं, इसलिए मेरे कुछ प्रश्न हैं:

  • मैं स्टैक की सामग्री को कैसे देख सकता हूं? उदाहरण: रजिस्टर की सामग्री देखने के लिए, मैं टाइप करता हूं info registers। स्टैक के लिए, यह क्या होना चाहिए?

  • मैं किस प्रकार की सामग्री देख सकता हूं $0x4(%esp)? जब मैं टाइप करता हूं print /d $0x4(%esp), तो GDB एक त्रुटि देता है।

प्लेटफ़ॉर्म: लिनक्स और जीडीबी


जवाबों:


113

info frame स्टैक फ्रेम जानकारी दिखाने के लिए

दिए गए पतों पर मेमोरी पढ़ने के लिए आपको एक नज़र डालनी चाहिए x

x/x $espअहस्ताक्षरित आदि के लिए हेक्स के x/d $espलिए x/u $espx प्रारूप वाक्यविन्यास का उपयोग करता है, आप वर्तमान निर्देश के माध्यम से भी देख सकते हैं x/i $eipआदि।


69

उपयोग:

  • bt - बैकट्रेस: ​​स्टैक फ़ंक्शंस और आर्ग्स दिखाएं
  • info frame - स्टैक स्टार्ट / एंड / आर्ग्स / लोकल पॉइंटर्स दिखाएं
  • x/100x $sp - स्टैक मेमोरी दिखाएं
(gdb) bt
#0  zzz () at zzz.c:96
#1  0xf7d39cba in yyy (arg=arg@entry=0x0) at yyy.c:542
#2  0xf7d3a4f6 in yyyinit () at yyy.c:590
#3  0x0804ac0c in gnninit () at gnn.c:374
#4  main (argc=1, argv=0xffffd5e4) at gnn.c:389

(gdb) info frame
Stack level 0, frame at 0xffeac770:
 eip = 0x8049047 in main (goo.c:291); saved eip 0xf7f1fea1
 source language c.
 Arglist at 0xffeac768, args: argc=1, argv=0xffffd5e4
 Locals at 0xffeac768, Previous frame's sp is 0xffeac770
 Saved registers:
  ebx at 0xffeac75c, ebp at 0xffeac768, esi at 0xffeac760, edi at 0xffeac764, eip at 0xffeac76c

(gdb) x/10x $sp
0xffeac63c: 0xf7d39cba  0xf7d3c0d8  0xf7d3c21b  0x00000001
0xffeac64c: 0xf78d133f  0xffeac6f4  0xf7a14450  0xffeac678
0xffeac65c: 0x00000000  0xf7d3790e

55

आपको gdb की मेमोरी-डिस्प्ले कमांड का उपयोग करने की आवश्यकता है। मूल एक है x, जांच के लिए । लिंक-इन पेज पर एक उदाहरण है जो उपयोग करता है

gdb> x/4xw $sp

हेक्साडेसिमल ( ) में wस्टैक पॉइंटर (यहां, $sp) के ऊपर "चार शब्द ( ) मेमोरी को प्रिंट करने के लिए x"। उद्धरण थोड़ा पैराफ्रेस्ड है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.