728x90

 

echo.s

xor rax, rax를 통해 rax를 0으로 설정해주고 rdx, rcx, rdx 또한 0으로 설정해준다.

rsp를 64만큼 확장하여 문자열 저장공간을 확보한다.

 

rax, 0 sys_call number 0번은 sys_read이다. 파일을 읽어들이는 함수인다. rdi 0을 통해 fd를 0으로 설정해주어 stdin이 가능하다. 즉 키보드 입력이 가능한 것이다. 이후 rsi에는 저장될 공간 rsp를 넣어주고 rdx에는 저장가능한 문자열 공간 63을 넣어준다. 64를 확장해주고 NULL이 들어갈 공간을 위해 rdx에는 63을 넣어준 것이다.

 

이후 rax, 1을 통해 syscall sys_write를 호출할 준비를 하고 rdi에 1을 넣음으로써 fd를 1로 설정하여 stdout이 가능하게 한다. 저장되어있는 문자열 주소인 rsp를 인자로 넣어주고 출력 크기인 63을 넣어준다.

syscall을 통해 화면에 문자열을 출력해준다.

 

60번 syscall 인 sys_exit을 통해 프로그램을 종료시켜준다.

echo 실행화면

입출력은 sys_read 와 sys_write로 가능하다.

rsp의 값 확장은 sub rsp, 확장할 크기 로 가능하다.

스택은 주소상 위에서 아래로 자라기 때문이다. sub로 값을 빼준만큼 스택공간이 확장된다.

728x90

'Programming > assembly' 카테고리의 다른 글

loop  (0) 2020.03.01
어셈블리 문법  (0) 2020.03.01
sum.c 스택 프레임  (0) 2020.03.01
메모리 구조  (0) 2020.03.01
Hello World (x64)  (0) 2020.03.01

+ Recent posts