2010-07-22 14 views
62

मुझे पता है कि हम का उपयोग और स्मृति को पढ़ने के लिए कई आदेशों का उपयोग कर सकते हैं: उदाहरण के लिए, प्रिंट, पी, के लिए एक्स ...जीडीबी का उपयोग कर स्मृति सामग्री को कैसे संशोधित करें?

लेकिन यह कैसे मैं किसी भी विशिष्ट स्थान पर स्मृति की सामग्री को बदल सकते हैं (जबकि GDB में डिबगिंग) ?

+0

स्मृति के लिए एक स्ट्रिंग लिखें: http://stackoverflow.com/questions/19503057/in-gdb-how-can-i-write-a-string-to-memory –

उत्तर

87

सबसे आसान एक कार्यक्रम चर (GDB: assignment देखें) स्थापित कर रही है:

(gdb) l 
6  { 
7   int i; 
8   struct file *f, *ftmp; 
9 
(gdb) set variable i = 10 
(gdb) p i 
$1 = 10 

या आप बस पता द्वारा मनमाने ढंग से (लिखने योग्य) स्थान को अपडेट कर सकते हैं:

(gdb) set {int}0x83040 = 4 

वहाँ अधिक है। the manual पढ़ें।

+4

मुझे प्रोग्राम चर सेट करने की आवश्यकता है मनमाने ढंग से स्मृति स्थानों तक पहुंच? क्या मैं अभी दूसरा सेट कमांड नहीं चला सकता? – Spidey

+4

हां, आप बिना पहले के दूसरे सेट कमांड चला सकते हैं। –

25

निकोलई ने कहा है कि आप एक चर के मान को बदलने के लिए gdb 'set' कमांड का उपयोग कर सकते हैं।

आप स्मृति स्थानों को बदलने के लिए 'सेट' कमांड का भी उपयोग कर सकते हैं। उदाहरण के लिए। निकोलाई के उदाहरण पर विस्तार:

(gdb) l 
6  { 
7   int i; 
8   struct file *f, *ftmp; 
9 
(gdb) set variable i = 10 
(gdb) p i 
$1 = 10 

(gdb) p &i 
$2 = (int *) 0xbfbb0000 
(gdb) set *((int *) 0xbfbb0000) = 20 
(gdb) p i 
$3 = 20 

यह किसी भी वैध सूचक के लिए काम करना चाहिए, और किसी भी उचित डेटा प्रकार के लिए डाली जा सकती है।

10

यहां दिए गए उत्तरों पर विस्तार।

आप एक चर सेट करने के लिए बस set idx = 1 कर सकते हैं, लेकिन उस वाक्यविन्यास की अनुशंसा नहीं की जाती है क्योंकि परिवर्तनीय नाम एक सेट उप-आदेश के साथ संघर्ष कर सकता है। उदाहरण के रूप में set w=1 मान्य नहीं होगा।

इसका मतलब है कि आपको वाक्यविन्यास पसंद करना चाहिए: set variable idx = 1 या set var idx = 1

अंतिम लेकिन कम से कम नहीं, आप केवल अपने भरोसेमंद पुराने प्रिंट कमांड का उपयोग कर सकते हैं, क्योंकि यह अभिव्यक्ति का मूल्यांकन करता है। एकमात्र अंतर यह है कि वह अभिव्यक्ति के परिणाम को भी प्रिंट करता है।

(gdb) p idx = 1 
$1 = 1 

आप gdb here के बारे में अधिक पढ़ सकते हैं।

संबंधित मुद्दे