2011-10-10 13 views
12

का उपयोग कर अगले "निर्देश" पर कूदते हुए मैं कैनरी वैल्यू सेटिंग और जांच तंत्र को समझने का प्रयास कर रहा हूं।जीडीबी

 
#include 
int main(void) 
{ 
     return printf("Hi!\n"); 
} 

मुख्य एकत्रित न, मैं

 
(gdb) disas main 
0x080483f4 : lea 0x4(%esp),%ecx 
0x080483f8 : and $0xfffffff0,%esp 
0x080483fb : pushl -0x4(%ecx) 
0x080483fe : push %ebp 
0x080483ff : mov %esp,%ebp 
0x08048401 : push %ecx 
0x08048402 : sub $0x14,%esp 
0x08048405 : mov %gs:0x14,%eax 
0x0804840b : mov %eax,-0x8(%ebp) 
0x0804840e : xor %eax,%eax 
0x08048410 : movl $0x8048500,(%esp) 
0x08048417 : call 0x8048320 
0x0804841c : mov -0x8(%ebp),%edx 
0x0804841f : xor %gs:0x14,%edx 
0x08048426 : je  0x804842d 
0x08048428 : call 0x8048330 
0x0804842d : add $0x14,%esp 
0x08048430 : pop %ecx 
0x08048431 : pop %ebp 
0x08048432 : lea -0x4(%ecx),%esp 
0x08048435 : ret 

मैं

 
b *0x0804840e 

का उपयोग कर 0x0804840e पर एक ब्रेकपाइंट सेट प्रोग्राम प्रवाह इस ब्रेकप्वाइंट पर रुक जाता है के बाद मैं पर जाने के लिए gdb चाहते हैं पाने के अगले निर्देश अगली सी कोड की पंक्ति के बजाय। मुझे नहीं लगता कि मैं इसके लिए next का उपयोग कर सकता हूं। तो हर निर्देश पर ब्रेकपॉइंट सेट करने से मुझे अलग-अलग विकल्प क्या हैं?

+0

GDB काफी अच्छा ऑनलाइन help' help' आप, विषयों की एक सूची मिल जाएगा है जो चल रहा है, के बीच; 'चलने में सहायता' सूचियों "stepi - चरण एक निर्देश बिल्कुल", और 'सहायता stepi' एक और विस्तृत विवरण देता है। – Cascabel

उत्तर

22

आप stepi का उपयोग करना चाहते हैं। यह एक मशीन निर्देश द्वारा कदम उठाता है। अधिक जानकारी के लिए

जांच ftp://ftp.gnu.org/pub/old-gnu/Manuals/gdb/html_node/gdb_37.html

+2

मैं छोटे 'si' या' ni' उपनाम का उपयोग करता हूं। –