Gdb में दिए गए पते पर असेंबली इंस्ट्रक्शन पर ब्रेक कैसे करें?


94
0x0000000000400448 <main+0>:    push   %rbp
0x0000000000400449 <main+1>:    mov    %rsp,%rbp
0x000000000040044c <main+4>:    mov    $0x6,%eax
0x0000000000400451 <main+9>:    leaveq 
0x0000000000400452 <main+10>:   retq   

मैंने कोशिश की:

breaki 0x0000000000400448

लेकिन ऐसा लगता है कि ऐसी कोई आज्ञा नहीं है।

क्या gdb में ऐसी सुविधा है?


3
क्यों breaki? कि एक टाइपो है?
दर्शन २

2
@Blauhirn शायद के साथ एक सादृश्य के रूप में stepiऔर nexti, जो अनुदेश स्तर पर एकल-कदम के लिए उपयोग किया जाता है।
प्रति लुंडबर्ग

जवाबों:


145

प्रयत्न break *0x0000000000400448


15
शायद क्योंकि * एक पते को निर्दिष्ट करने के लिए आवश्यक है। देखें sourceware.org/gdb/current/oniltocs/gdb/…
लॉरेंट जी

4
और निश्चित रूप से आप अग्रणी शून्य को हटा सकते हैं और संक्षिप्त कर सकते हैं break, दे सकते हैं b *0x400448
user202729

फंक्शन या डेटा के साथ नामांकित करने के लिए 0x0000000000400448(असामान्य रूप में यह होगा!)
दान एंडरसन

1
@ संकलन-प्रशंसक विराम * पता पते पर एक विराम बिंदु निर्धारित करें। आप अपने प्रोग्राम के उन हिस्सों में ब्रेकपॉइंट सेट करने के लिए इसका उपयोग कर सकते हैं, जिनमें डिबगिंग जानकारी या स्रोत फ़ाइलें नहीं हैं। ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_28.html मैं एक असेंबली कोड डीबग कर रहा था और यहां उसी प्रश्न के लिए पहुंचा था जो आपने पूछा था।
P4cK3tHuNt3R 9

62

दूसरा रास्ता:

break *main+4

इससे 0x000000000040044c
मुझे लगता है कि यह पूरा पता लिखने की तुलना में आसान है , एक विराम बिंदु जोड़ देगा !

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