No img


Assembly -3. 간단한 에코 프로그램

Posted by bonggang | 2020. 5. 25. 02:17

목표: 키보드로 입력받은 메세지를 다시 출력하는 기본 프로그램 제작

 

소스 코드


section .text
        global _start

_start:
        sub rsp, 100

        mov rax, 0
        mov rdi, 0
        mov rsi, rsp
        mov rdx, 99
        syscall

        mov rax, 1
        mov rdi, 1
        mov rsi, rsp
        mov rdx, 99
        syscall

        mov rax, 60
        syscall

 

5줄) sub rsp, 100: 입력받을 버퍼 공간 할당

 

7~11줄) 사용자 값 입력

mov rax, 0: 읽기 위한(sys_read) system call의 rax 값은 0이다.

mov rdi, 0: sys_read의 rdi 값은 *file description 값인데 standard input 값은 0이다.

* 0: standard input, 1: standard output, 2: standard error 

mov rsi, rsp: 버퍼 위치

mov rdx, 99: 99개만큼 받을 수 있다.

syscall에 대해 더 자세히 확인하고 싶으면 아래 주소 참고

https://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/

 

Linux System Call Table for x86 64 · Ryan A. Chapman

Linux 4.7 (pulled from github.com/torvalds/linux on Jul 20 2016), x86_64 Note: 64-bit x86 uses syscall instead of interrupt 0x80. The result value will be in %rax To find the implementation of a system call, grep the kernel tree for SYSCALL_DEFINE.\?(sysca

blog.rchapman.org

 

13~17줄) 입력 받은 값 출력

 

실행 결과


'CS > Assembly' 카테고리의 다른 글

Assembly -4. for문 구현  (0) 2020.05.26
Assembly -2. 기본 문법, 명령  (0) 2019.07.07
Assembly -1. HelloWorld!  (0) 2019.07.06