2014-04-26 95 views
0

我試圖驗證在這個例子中(NASM)用戶輸入的長度:爲什麼我不能在NASM組件中打印用戶輸入數據?

section .bss 
    user_input resb 10 

section .text 
    push ebp 
    mov ebp, esp 

    mov eax, 3 ;sys_read 
    mov ebx, 0 ;stdin 
    mov ecx, user_input 
    mov edx, 10 
    int 80h 

    cmp eax, 10 
    jg overflow 
    jmp done 
overflow: 
    . 
    . 
    . 
done: 
    mov eax, 1 
    int 80h 

爲什麼不是這方面的工作?

回答

0

由於您的緩衝區是10個字節,並且您將長度放入edx,所以返回值永遠不會大於10,並跳轉到標籤done:並退出。

您所展示的代碼中沒有任何東西可以打印出任何東西。

+0

但是,如果我數字超過10個字符('\ 0'),它被程序接受...我想避免這種情況。我怎樣才能做到這一點?? –

+0

'cmp byte [ecx + eax-1],10]' - 如果換行符在您的緩衝區中,則沒有溢出。如果沒有,請繼續閱讀虛擬緩衝區,直到換行顯示。沒有涉及'\ 0'(除非你覆蓋換行)。當然,用sys_write打印(打印'edx'字節 - 不會停在'\ 0'或'\ n'上)。 –

相關問題