2011-12-07 11 views
57

मैं आम तौर पर के साथ अपने कार्यक्रम चलाते हैं।gdb पाइप इनपुट (नहीं तर्क) के साथ डिबगिंग

यदि यह सिर्फ एक आदेश तर्क थे, मैं ऐसा करके gdb खोल सकते:

gdb ./vuln_prog 
run $(perl -e 'print "A"x200') 

लेकिन, मेरा परिदृश्य एक आदेश तर्क इनपुट नहीं है, बल्कि (? STDIN)। मैं इसे जीडीबी में कैसे डीबग करूं? मैंने विकल्पों का एक गुच्छा करने की कोशिश की है, लेकिन वास्तव में कुछ भी काम नहीं करता है।

मैं आमतौर पर प्रक्रिया पर जीडीबी चलाता हूं, और जब यह उपयोगकर्ता इनपुट के लिए संकेत देता है, तो इसे टाइप करें, हालांकि मैं सिर्फ "ए" टाइप नहीं करना चाहता हूं। मैं सभी वर्णों को \ x00- \ xff से टाइप करना चाहता हूं, जिसे मैं टाइप नहीं कर सकता।

+0

आप 'get' का उपयोग क्यों कर रहे हैं? मेरा मतलब है कि कभी-कभी यह स्वीकार्य है (जैसे कि आप कुछ परीक्षण करने के लिए एक त्वरित प्रोग्राम लिख रहे हैं, या यदि प्रोग्राम केवल विश्वसनीय इनपुट के साथ चलाया जाएगा) लेकिन मैं उत्सुक हूं। – flarn2006

+0

यह मेरा कोड नहीं था। यह एक मजेदार रिवर्स इंजीनियरिंग चुनौती के लिए था, जहां कोड प्रदान किया गया था। – mandreko

+0

ओह ठीक है। जानबूझकर इस्तेमाल किया गया था * क्योंकि * यह चुनौती के संभावित समाधान के हिस्से के रूप में कमजोर था? – flarn2006

उत्तर

77
gdb ./vuln_prog 
run < filename_with_input 
+0

आपको बहुत बहुत धन्यवाद। मैं सीधे इनपुट चलाने की कोशिश कर रहा था, जहां मुझे सिर्फ फाइल पर पर्ल कोड मुद्रित करना चाहिए था, और इसे इनपुट करना था। यह आश्चर्यजनक ढंग से काम किया। – mandreko

+1

क्या 'lldb' समतुल्य है? –

+1

@ थॉमसएहल एलएलडीबी समकक्ष के लिए http://stackoverflow.com/questions/29861242/cannot-get-mac-os-x-lldb-process-to-read-the-stdin – jernkuan