컴맹에서 컴공 그리고 화이트 해커가 되는 그날까지

어셈블리어로 'Hello World' 출력하기 본문

프로그래밍/어셈블리어

어셈블리어로 'Hello World' 출력하기

공부하는 뚱이 2024. 9. 15. 21:12
반응형

간단한 어셈블리 언어 프로그램으로 리눅스 환경에서 "Hello World"

문자열을 출력한 후 프로그램을 종료하는 코드를 작성해 보았다.

 

.data 섹션:

  • 이 섹션은 프로그램이 사용할 데이터를 정의하는 곳입니다. 여기서 "Hello World"라는 문자열을 msg라는 레이블로 저장합니다. 이 문자열은 프로그램에서 출력될 메시지입니다.

.text 섹션:

  • 이 섹션은 실제 실행될 코드가 포함된 부분입니다.
  • global _start: _start라는 라벨을 전역으로 선언하여 프로그램의 시작 지점으로 사용합니다. 이는 운영 체제가 이 위치에서 프로그램 실행을 시작하도록 지시합니다.

_start 라벨에서의 코드:

  • mov rax, 1: 시스템 호출 번호를 rax 레지스터에 설정합니다. 리눅스 시스템 호출에서 1은 write 호출을 의미합니다.
  • mov rdi, 1: 표준 출력(파일 디스크립터 1, 즉 stdout)을 rdi에 설정합니다.
  • mov rsi, msg: 출력할 문자열의 주소를 rsi에 저장합니다. 이 주소는 msg 레이블로 저장된 "Hello World" 문자열을 가리킵니다.
  • mov rdx, 12: 출력할 문자열의 길이를 rdx에 설정합니다. 문자열 "Hello World"는 12바이트이므로 12를 지정합니다.
  • syscall: 이 명령어는 커널에 시스템 호출을 실행하라고 지시합니다. 여기서는 write 시스템 호출이 실행됩니다.

프로그램 종료:

  • mov rax, 60: 시스템 호출 번호 60을 rax에 설정합니다. 60은 exit 시스템 호출 번호로, 프로그램을 종료할 때 사용됩니다.
  • mov rdi, 0: 종료 상태 코드 0을 rdi에 설정합니다. 0은 정상 종료를 의미합니다.
  • syscall: 커널에 exit 시스템 호출을 실행하도록 지시하여 프로그램을 종료합니다.

이 코드는 리눅스 커널에서 실행되는 어셈블리 프로그램입니다. syscall은 리눅스 운영 체제에서 시스템 호출을 수행하는 명령어로, 주어진 번호와 인자를 바탕으로 커널에 특정 작업을 요청합니다. 여기서는 write 시스템 호출을 통해 콘솔에 문자열을 출력하고, exit 호출을 통해 프로그램을 정상적으로 종료하는 구조입니다.

  • write 시스템 호출: rax = 1, rdi = 파일 디스크립터 (stdout: 1), rsi = 출력할 문자열 주소, rdx = 문자열의 길이
  • exit 시스템 호출: rax = 60, rdi = 종료 상태 코드

 

 

 

* 리눅스 환경에서 이 코드를 실행하면 "Hello World"가 터미널에 출력되고 프로그램이 종료됩니다. *

반응형

'프로그래밍 > 어셈블리어' 카테고리의 다른 글

대표적인 어셈블리 명려  (1) 2023.09.05