GDB का उपयोग करके मेमोरी सामग्री को कैसे संशोधित किया जाए?


87

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

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


मेमोरी के लिए एक स्ट्रिंग लिखें: stackoverflow.com/questions/19503057/…
Ciro Santilli 病:::

जवाबों:


124

सबसे आसान प्रोग्राम चर सेट कर रहा है ( GDB देखें : असाइनमेंट ):

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

अभी और है। मैनुअल पढ़ें ।


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

भी, set (str[6]) = 'c'काम करता है, अगर आपके पास एक सरणी है, जैसेchar str[]
xealits

30

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

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

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


set {char[100]}(0x00) = ""0x00 पर मेमोरी की 100 बाइट्स साफ़ करता है
davenpcj

16

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

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

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

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

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

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