Programming Language/Assembly

[Assembly] 파일입출력

Ccomment 2016. 12. 5. 20:19

실행환경

- cpu : 인텔계열(64bit)

- 컴파일러 : nasm

- 리눅스 : ubuntu 16.04 LTS


설치방법

sudo apt-get install nasm


컴파일

- nasm -f elf64 파일명.asm -o 파일명.o  --> 목적파일을 만든다.

- ld 파일명.o -o 파일명  --> 실행파일을 만든다.



fileio.asm

section .data


file_name db 'testio',0


len equ $ -file_name


file_text db 'my name is jung'


len1 equ $ -file_text


newLine db 0x0a


section .bss


file_out resb  1 ;내가 열어본 파일의 정보의 디스크립트를 가지고 있는 변수


file_in resb   1


data resb  10


section .text


global _start




_start:


;파일이 있는지 없는지 덮어씌우기를 하고


;없으면 만들어 준다 키워드 8은 파일을 생성하고 없으면 덮어씌우기를한다.


;8번은 파일을 생성할때 쓰는 키워드가 된다.




mov eax,8 ;파일io를 사용하겠다라는 위치 , fd는 eax에 저장된다.


mov ebx,file_name ;여기는 파일 이름을 집어넣는 위치


mov ecx,777o ;파일 권한을 입력해주는 곳


mov edx,len ;길이를 넣어주는 곳


int 0x80




mov [file_out],eax




mov eax,4


mov ebx,[file_out] ;ebx를 통해 해당하는 파일의 정보를 알고있는 


;디스크립트를 통해 파일에 출력한다.


mov ecx,file_text


mov edx,len1


int 0x80




;만들 파일의 내용을 꺼내와서 출력도 해본다.


mov eax,5 ;파일을 읽어 드리기 위해 파일 디스크립트를 읽어오는 부분


mov ebx,file_name


;파일을 읽을건데 크기를 얼마나 주는지 크기를 알려준다.


;0x00 읽기용 , 0x01 쓰기용 , 0x02 읽고 쓰기용


mov ecx,0x00


mov edx,777o


int 0x80




mov [file_in],eax



mov eax,3


mov ebx,[file_in]


mov ecx,data


mov edx,20


int 0x80




mov eax,4


mov ebx,1


mov ecx,data


mov edx,20


int 0x80




mov eax,4


mov ebx,1


mov ecx,newLine


mov edx,1


int 0x80




mov eax,1


int 0x80