2018. 4. 29. 03:00ㆍ0x04 pwnable
<고수준 파일 입출력>
참고. 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 |