linux - why does my asm program run infinitely -


मैंने एम्बेड

नामक कार्यक्रम बनाया है स्रोत कोड नीचे है

समस्या: मुझे नहीं पता कि यह प्रोग्राम क्यों अनन्त रूप से चलाता है।

मेरा विकास पर्यावरण linux, emacs, assembly, x86, at & amp; t वाक्यविन्यास

  #usage: इनपुट आउटपुट संदेश एम्बेड करें # इस प्रोग्राम को इनपुट के टेक्स्ट में एम्बेड संदेश और एक आउटपुट फाइल बनाते हैं # example1: #input: "abcde" #message: dc #output: "abcDe" # Example2: #input: "abcde" #message: bcd #output: "aBCDe" .section .data .section .bss .lcomm buff, 1 .section .text .global_start_start: प्रारंभ: movl% esp,% ebp movl $ 0,% edi subl $ 8,% esp # निकास_प्रोग्राम open_r पर ध्यान दिया गया है: $ 5,% एएक्स movl 8 (% ईबीपी),% ebx movl $ 0,% ecx movl $ 0666,% edx int $ 0x80 save_rfd: # सेव टू -4 (% ईबीपी) movl% eax, -4 (% ईबीपी) open_w: movl $ 5,% eax movl 12 (% ebp),% ebx movl $ 03101,% ecx movl $ 0666,% edx int $ 0x80 save_wfd: # सेव टू -8 (% ईबीपी) movl% eax, -8 (% ईबीपी) पाश: आरएफडी_आइट: $ 3,% एएक्स एमएलएल -4 (% ईबीपी),% ईबीएक्स एमएलएल बफ़ एफ,% एक्सएक्स एमएलएल $ 1,% एडीएक्स इंट $ 0 एक्स 80 चेक_ईओएफ: सेमीप्लैक $ 0,% एएक्सआईसीआईआईएल एफ़आईपीआईपीआरआई कॉल_फंक: पॉवर 16 (% ईबीपी) # 16 (% ईबीपी) संदेश कॉल चेकनोकॉल्टर # इस बफ़र को बदल जाएगा wfd_write: movl $ 4,% ईएक्स movl -8 (% ईबीपी),% ebx movl buff,% ecx movl $ 1,% edx int $ 0x80 jump_loop: jmp लूप exit_program: एडीएल $ 8,% esp movl $ 1,% eax movl $ 0,% ebx int $ 0x80 चेकएन्कन्वर्ट: (% Ebx,% edi, 1),% bl # संदेश का एडीआई का किरदार% से अधिक% Bl cmpb buff,% bl #compare jne end_checkNconvert .equ n, 'a' - 'a' #n सिर्फ संख्या का उपयोग $ n subb $ n, buff incl% edi end_checkNconvert के रूप में किया जाना चाहिए: movl% ebp,% esp popl% Ebp ret    

में rfd_read (और wfd_read के रूप में भी), आप buff की सामग्री को syscall में दूसरी तर्क के रूप में लोड कर रहे हैं:

  movl buff,% ecx   

... लेकिन आप क्या चाहते हैं का पता बफ़ :

  तो आप  पढ़ने  syscall में एक खराब पॉइंटर गुजर रहे हैं, जो लगभग % eax = के साथ वापस आ जाएगा - =========================================================================== < EFAULT  (-14) - पर  check_EOF पर कोड  त्रुटियों की जांच नहीं करता है।   

Comments