고수준 파일 입출력 공부

2018. 4. 29. 03:000x04 pwnable

728x90

<고수준 파일 입출력>


참고. http://12bme.tistory.com/214?category=753165


이전 글에서 언급했듯이 고수준 파일 입출력은 Standard Input/Output Library라고도 한다.


고수준 파일 입출력은 바이트 단위가 아닌, "버퍼"로 입출력을 진행한다. 


고수준 파일 입출력은 FILE*를 사용하는데, 이는 디스크에서 메모리로 읽어온 파일의 위치에 관한 정보를 담고 있는

포인터이다. 


파일 포인터 구조체안에는 파일 기술자(file discriptor), 버퍼 주소, 버퍼 내 문자등이 존재한다.


고수준 파일 입출력 역시 바이트 단위로 입출력은 할 수 있는데, 이때 문자 기반 입출력 함수를 이용하게 된다.


==============

문자 기반 입력함수 

==============


1. fgetc()


ref. 

------------------------------

if C:

#include<stdio.h>

if C++:

<cstdio>

------------------------------

원형 : int fgetc(FILE *stream)


Stream에서 문자 하나를 읽어오는 함수이다. (Unsigned char)

인자로 전달한 stream의 파일 위치 지정자가 가리키는 문자를 리턴할 때 사용한다.

파일 위치 지정자는 그 다음 문자를 가리키게 된다. 



[parameter]

Stream : fgetc가 읽어들인 스트림의 FILE 객체에 대한 포인터 


[return value]

읽어들인 문자는 int 값으로 리턴 됨.

EOF 이거나, 읽다가 오류가 발생하면 ferror / feof 함수로 인해 확인할 수가 있다.


2. getc()


int getc(FILE *stream)


fgetc와 동일한 기능이지만, 속도가 더 빠르다. 그리고, 실행 코드가 확장되기 때문에 메모리 차지량이 더 많다.

getchar의 매크로가 getc(stdin)이다. 이건 처음 알았다.


#define getchar() getc(stdin)



==============

문자 기반 출력함수 

==============


1. fputc


원형 : int fputc(int c, FILE *stream)


인자로 받은 int 데이터를 Unsigned char로 변환하여 파일에 쓰게 된다. 


2. putc


원형 : int putc(int c, FILE *stream)

getc와 마찬가지로 이 역시 putchar의 매크로이다.


#define putchar(c) puts(c,stdout)


다른것들은 이미 알고 있는 것들이 많아서 따로 적지는 않았는데 다른 것도 공부할 사람은 상기의 블로그를 참고바란다.

'0x04 pwnable' 카테고리의 다른 글

Rootme ch12 (Race condition)  (0) 2018.05.02
Rootme Race condition (ch12)  (0) 2018.05.02
저수준 파일 입출력 공부  (0) 2018.04.29
Protostar Simple Writeup  (0) 2018.04.10
Protostar  (2) 2018.04.10