vi 을 많이 써봤어도 nano는 써본 적이 없어서 신기했습니다.
단축키 정리는 이 블로그가 좋은 거 같습니다.
https://junistory.blogspot.com/2017/08/nano.html
어셈블리어 파일인 helloworld.s 을 다음과 같이 작성했습니다.
section .data 는 전역 변수 할당을 위한 공간이고
section .text 는 프로그램 실행 코드를 담고 있습니다. global _start 로 _start 라는 프로시저가 전역에 있음을 명시합니다.
_start 는 main 함수가 실행되기 전 실행되는 함수 입니다.
어셈블리어 mov는 다음과 같이 실행됩니다.
mov 값1 값2 는 값1 = 값2
syscall은 커널에 접근하는 방식으로 이해를 하시면 될거 같아요.
앞으로 공부를 하면서 조금 더 자세하게 배울겁니다!
nasm 명령어를 통해 어셈블리 파일 helloworld.s 로 명령어 파일 helloworld.o 을 생성합니다.
nasm은 넷와이드 어셈블러의 줄임말로 인텔로 어셈블러입니다.
여기까지 오면 ls 로 파일을 확인하면 다음과 같이 녹색으로 실행 가능한 초록파일이 뜹니다.
이를 실행시켜보면 다음과 같이 Hello World 가 출력되는 걸 알 수 있습니다.
근데 Segmentation fault 도 같이 떴네요. 왜 일까요?
저는 아직 쌩초보라서 계속 뭐가 문제인지 찾아봤습니다. 역시 어셈블리라서 그런지 띄어쓰기 하나하나에 예민하더라구요?
비교적 빨리 오류를 찾았습니다. 마지막 줄에 syscalls 가 아니라 syscall인데 오타군요!
이와 같이 수정하면 Segmentation falut 가 안 뜨고 정상적으로 멋지게 돌아갑니다.
'해킹 > 시스템해킹' 카테고리의 다른 글
어셈블리어 문법 간단 정리 (0) | 2020.08.03 |
---|---|
시스템 해킹 echo 구현 (0) | 2020.08.03 |
시스템해킹 메모리 커럽션 (0) | 2020.08.02 |
시스템 해킹 기초 (0) | 2020.08.01 |
시스템해킹 레지스터 쓰임새와 시스템콜 (0) | 2020.07.31 |