से xxd की तरह स्वरूपित मेमोरी डंप मैं एक बफर का निरीक्षण करने की कोशिश कर रहा हूं जिसमें बाइनरी स्वरूपित संदेश है, लेकिन इसमें स्ट्रिंग डेटा भी शामिल है। एक उदाहरण के रूप में, मैं इस सी कोड का उपयोग कर रहा:जीडीबी
int main (void) {
char buf[100] = "\x01\x02\x03\x04String Data\xAA\xBB\xCC";
return 0;
}
मैं (क्या, buf
में है एक प्रारूप xxd
के लिए इसी तरह की की एक हेक्स डंप प्राप्त करना चाहते हैं, तो उसके एक सटीक मिलान है मुझे परवाह नहीं है , जो मैं वास्तव में देख रहा हूं वह प्रिंट करने योग्य वर्णों के साथ एक हेक्स डंप पक्ष है)।
GDB के अंदर मैं की तरह कुछ का उपयोग कर सकते हैं:
(gdb) x /100bx buf
0x7fffffffdf00: 0x01 0x02 0x03 0x04 0x53 0x74 0x72 0x69
0x7fffffffdf08: 0x6e 0x67 0x20 0x44 0x61 0x74 0x61 0xaa
0x7fffffffdf10: 0xbb 0xcc 0x00 0x00 0x00 0x00 0x00 0x00
0x7fffffffdf18: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7fffffffdf20: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7fffffffdf28: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7fffffffdf30: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7fffffffdf38: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7fffffffdf40: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7fffffffdf48: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7fffffffdf50: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7fffffffdf58: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
जो ठीक है, लेकिन इसे उस तरह से तार बाहर लेने के लिए मुश्किल है ... या मैं
(gdb) x /100bs buf
0x7fffffffdf00: "\001\002\003\004String Data\252\273\314"
0x7fffffffdf13: ""
0x7fffffffdf14: ""
0x7fffffffdf15: ""
0x7fffffffdf16: ""
0x7fffffffdf17: ""
...
जो यह मुश्किल बना देता है का उपयोग कर सकते बाइनरी भाग को पढ़ने के लिए ... जिन वास्तविक संदेशों के साथ मैं काम कर रहा हूं उनमें बहुत से एसीसी नूल हैं, वास्तव में, यह वास्तव में एक गड़बड़ की तरह दिखता है।
सबसे अच्छा मैं के साथ आ सकते हैं यह करने के लिए है:
(gdb) dump binary memory dump.bin buf buf+100
और फिर
$ xxd dump.bin
0000000: 0102 0304 5374 7269 6e67 2044 6174 61aa ....String Data.
0000010: bbcc 0000 0000 0000 0000 0000 0000 0000 ................
0000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0000060: 0000 0000 ....
लेकिन यह है कि हर बार ऐसा करने के लिए एक दर्द है। मैंने किसी को यह समझ लिया कि वहां पहले यह चाहता था, तो सोच रहा है कि किसी को जीडीबी के अंदर ऐसा करने का कोई तरीका मिला है। इसके अलावा आप इस तरह मूल स्मृति से पते खो देते हैं।
मैं जीडीबी 7.4 का उपयोग पाइथन समर्थन के साथ कर रहा हूं, इसलिए मैं एक सुंदर प्रिंटर या इसी तरह के उपयोग के विचार के लिए खुला हूं, लेकिन मुझे नहीं पता कि इसे कैसे सेट अप किया जाए।
आह, अच्छी सोच। यह नहीं पता था कि जीडीबी में शॉर्टकट जोड़ना इतना आसान था। मैंने आपके द्वारा वर्णित पायथन में इसे कोडिंग समाप्त कर दिया, लेकिन मुझे यकीन है कि मैं उस मुहावरे को उपयोग करने में सक्षम हूं। – FatalError
ध्यान दें कि यदि '$ arg0' किसी संरचना के लिए सूचक है, तो '$ arg1' को ऑब्जेक्ट्स की गिनती के रूप में माना जाएगा, बाइट्स नहीं। '((शून्य *) $ arg0) + $ arg0 + $ arg1' के बजाय + $ arg1' का उपयोग करें यदि यह एक समस्या होगी। –
यह भी ध्यान रखें कि 'xxd' के नए संस्करण' -o' ध्वज का समर्थन करते हैं, जो प्रदर्शित पते मानों में ऑफसेट जोड़ता है। –