안녕 하세요 준P입니다.


오늘은 리눅스에서 어셈블리어로 프로그래밍을 해 보도록 합시다.


그러면 일단 리눅스에 nasm이 설치되어있어야함니다.


sudo apt-get install nasm


으로 설치해 줍시다.


자 nasm이 설치 되엇으면 vim으로 asm.asm을 만들어줍시다. 


그리고 나서 


section .data

                        ;여기에는 데이터를 넣는 곳 입니다.

msg db "hello world",0x0A

                        ; hello world 라는 단어와 새줄 이라는 16진수 코드

section .text


global _start

  

_start

mov eax,4          ; write의 시스템 콜 번호

mov ebx,1          ; write의 표준 출력은 1번이다.

mov ecx,msg      ; write의 두 번쨰 인자에 메세지 주소 저장

mov edx,12        ; write 의 세 번쨰 인자에 문자열 길이 저장

int 0x80             ; 실행


mov eax,1         ; exit의 시스템 콜 번호

mov ebx,0         ; exit의 정상적인 종료

int 0x80             ; 실행


자 이제 작성이 끝낫다면


컴파일을 해야죠


하지만 그전에 자신의 리눅스 시스템이 32비트인지 64비트인지 알아야 합니다.


uname -p 


이 명령어로  x86이 나왓다면 32비트인것이고 x86_64라면 64비트 인 것 입니다.



참고로 저는 64비트 입니다.


자 이제 자신이 몇 비트 인지 알았으니


컴파일을 해봅시다.


32비트라면 nasm -f elf asm.asm    


64비트라면 nasm -f elf64 asm.asm    


nasm -f elf asm.asm     ;이 명령어 후에는 asm.o가 만들어 짐니다.


ld asm.o                     ;실행 파일로 만들어 줌니다. 


./a.out                       ;실행 입니다.




저 위 에러를 해석 하면


경고 : 레이블을 혼자 선에 콜론없이하는 것은 오류가있을 수 있습니다


라고 하는데요 주석 떄문 입니다. 간단히 무시 하시면 됨니다.


네 정상적으로 컴파일이 되엇습니다.



'Development > Assembly' 카테고리의 다른 글

어셈블리 프로그래밍  (0) 2015.06.21
리눅스 syscall table for x86_64  (0) 2014.09.18
리눅스 system table for x86  (0) 2014.09.14
Posted by 준P