簡體   English   中英

Linux系統調用X86 64 echo程序

[英]Linux system call for X86 64 echo program

我仍在學習匯編程序,因此我的問題可能微不足道。 我試圖用syscall編寫一個echo程序,在其中我得到用戶輸入,並在下一行將其作為輸出。

section .text
    global _start

_start:
    mov rax,0
    mov rdx, 13
    syscall

    mov rsi, rax
    mov rdx, 13
    mov rax, 1      
    syscall

    mov    rax, 60
    mov    rdi, 0
    syscall 

我假設您要做的只是將輸入返回到輸出流,因此,您需要做一些事情。

首先,在代碼中創建一個section .bss 這是用於初始化數據。 您將使用所需的任何名稱初始化字符串,並使用label resb sizeInBits 為了演示,它將是一個稱為echo的32位字符串。

附加說明,“;” 字符用於注釋,類似於c ++中的//。

范例程式碼

section .data
    text db "Please enter something: " ;This is 24 characters long.

section .bss
    echo resb 32 ;Reserve 32 bits (4 bytes) into string

section .text
    global _start

_start:
    call _printText
    call _getInput
    call _printInput

    mov rax, 60 ;Exit code
    mov rdi, 0 ;Exit with code 0
    syscall

_getInput:
    mov rax, 0 ;Set ID flag to SYS_READ
    mov rdi, 0 ;Set first argument to standard input
    ; SYS_READ works as such
    ;SYS_READ(fileDescriptor, buffer, count)

    ;File descriptors are: 0 -> standard input, 1 -> standard output, 2 -> standard error
    ;The buffer is the location of the string to write
    ;And the count is how long the string is

    mov rsi, echo ;Store the value of echo in rsi
    mov rdx, 32 ;Due to echo being 32 bits, set rdx to 32.
    syscall
    ret ;Return to _start

 _printText:
     mov rax, 1
     mov rdi, 1
     mov rsi, text ;Set rsi to text so that it can display it.
     mov rdx, 24 ;The length of text is 24 characters, and 24 bits.
     syscall
     ret ;Return to _start

_printInput:
    mov rax, 1
    mov rdi, 1
    mov rsi, echo ;Set rsi to the value of echo
    mov rdx, 32 ;Set rdx to 32 because echo reserved 32 bits
    syscall
    ret ;Return to _start

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM