WSL2(우분투) 환경에서 어셈블리로 Hello World 출력하기

숌 개발 공부 블로그·2021년 2월 27일
0

1. nasm 설치

$ sudo apt intall nasm

2. hello.s 파일 작성

  • Intel 문법으로 작성되어 있음
section .data ;data섹션
	msg db "hello world", 0x0A

_main :
	mov rax, 1 ;리눅스의 syscall write()함수 번호 (맥에서는 0x2000004)
	mov rdi, 1
	mov rsi, msg
	mov rdx, 12
	syscall
	mov rax, 60 ;리눅스의 syscall exit()함수 번호 (맥에서는 0x2000001)
	mov rdi, 0
	syscall

section .text ;text섹션
	global _main ;전역에서 접근 가능

3. 컴파일

3-1. 오브젝트 파일 생성

nasm -f elf64 hello.s
  • 맥에서는 elf64 대신 macho64를 쓰자

3-2. 실행파일 생성

ld hello.o -o hello
  • ld: warning: cannot find entry symbol _start; 이런 오류메세지가 뜨는데 (떠도 컴파일은 됨!!!) 이는 _main을 썼기 때문 -> _main_start로 고치면 오류가 뜨지 않는다.

4. 실행

./hello

결과를 보면 잘 나온당

1개의 댓글

comment-user-thumbnail
2023년 3월 19일

세그폴트가 떠요 선생님..! ㅠㅠ

답글 달기