2023. 2. 23. 01:17ㆍ코딩/공부 [STUDY]
1. 과제
목표 > 파일을 생성하여 Hello world!을 작성하고 저장하기
section .data
filename db "example.txt", 0
text db "Hello, world!", 10, 0
section .text
global _start
_start:
mov rax, 2
mov rdi, filename
mov rsi, 0101o
mov rdx, 0644o
syscall
mov rbx, rax
mov rax, 1
mov rdi, rbx
mov rsi, text
mov rdx, 14
syscall
mov rax, 3
mov rdi, 0
syscall
mov rax, 60
mov rdi, 0
syscall
결과 > 정상적으로 example.txt 가 생성이 되고, Hello world!가 출력된다.
2. code review
.data 세그먼트
filename이라는 변수에 example.txt 라는 값을 넣는다.
text라는 변수에 "Hello world!"를 넣는다.
.text 세그먼트
별거 없으니 생략함
_start
크게 4개의 부분으로 나뉘어 있는 것을 볼 수 있는데,
위에서 부터
open,write,close,exit 이다.
open(filename,flags,mode)
rdi에 filename을 넣어준다.
flags에는 0101o 가 들어가고
그 아래 rdx에는 0644o가 적혀있다.
https://coding-today.tistory.com/21
[Linux] 리눅스 권한(Permission) 설정(8진수 표기)
멀티유저 운영체제인 리눅스는 보안을 위해 파일, 디렉토리에 대한 권한, 소유자, 그룹을 설정 ▷ 권한 - 읽기(r) : 조회 - 쓰기(w) : 등록, 수정, 삭제 - 실행(x) : 실행 ▷ 권한 정보 rwxr-xr-x - rwx : 소
coding-today.tistory.com
해당 블로그를 참고하면 좋을 것 같다.
참고로 뒤에 붙은 o는 8진수를 의미한다고 한다.
그리고 syscall 바로 아래에 rbx에 rdi 값을 넘겨주는데, 이는 아래에서 수행 할
write에서 1번째 인자에 들어가는 fd(파일 디스크럽터) 부분에 넘겨준다.
write(fd,*buf,count)
fd에는 2가 들어갔고 buf에는 text가, count에는 Hello world!의 길이인 14가 들어간 것을 확인 할 수있다.
close(fd)
close는 별게 없는데, 그냥 close를 호출하고 이후에 fd에 0을 넣어주며 정상적으로 파일을 닫는다.
exit(error_code)
에러가 없음을 확인하는 0을 넣어주며 정상적으로 코드를 종료한다.
'코딩 > 공부 [STUDY]' 카테고리의 다른 글
[STUDY] 어셈블리어 - 5 (0) | 2023.02.28 |
---|---|
[STUDY] 어셈블리어 - 4 (0) | 2023.02.25 |
[STUDY] 어셈블리어 - 3 (rip,rsp,rbp,스택프레임) (1) | 2023.02.23 |
[STUDY] 어셈블리어 - 1 (0) | 2023.02.22 |
[STUDY] Web - javascript prototype pollution (0) | 2022.07.18 |