시스템 문제를 풀다보면 파일 디스크립터, 일명 fd라는 것이 자주 등장한다. 난 이걸 오래전부터 봐왔지만 볼 때마다 헷갈려 했었다. 요즘 푸는 nebula 워게임 문제에 나타나 이참에 정리 해보려고 한다.
* 파일 디스크립터 (File Descriptor)
- 시스템으로부터 할당 받은 파일을 대표하는 0이 아닌 정수 값
- 프로세서 열린 파일의 목록을 관리하는 테이블의 인덱스
프로그램이 프로세스로 메모리에서 실행을 시작 할 때, 기본적으로 할당되는 파일 디스크립터들이 있다. 바로 표준 입력(Standard Input), 표준 출력(Standard Output), 표준 에러(Standard Error)이다. 이 들에게 각각 0, 1, 2 라는 정수가 할당된다. (미리 예약된 것)
이들은 프로그램이 시작되면 기본적으로 열리고, 종료 시 자동으로 닫히게 된다.
따라서 파일 오픈이나 소켓을 생성했을 때 부여되는 파일 디스크립터는 3부터 시작된다.
진짜 그런지 테스트를 한 번 해보았다.
0,1,2가 표준 입력, 표준 출력, 표준 에러로 미리 예약이 되어있으니까 fd는 3, fd2는 4, fd3은 5로 출력이 되어야한다고 생각했다.
생각한 대로 출력이 되었다.
계속 헷갈려하던 개념이었는데 이제서야 이해했다. 이제라도 이해해서 참 다행이다.
다음엔 open, read, write 등 함수에 대해 알아봐야게따
'System Hacking' 카테고리의 다른 글
함수 프롤로그(prolog) / 함수 에필로그(eplilog) (1) | 2020.09.17 |
---|---|
pwndbg를 이용한 ELF 동적 분석 방법 (0) | 2020.08.29 |
[pwntools] 사용법 정리 -(최초 작성 : 20.08.28) (0) | 2020.08.28 |
스택 프레임 (Stack Frame) (2) | 2020.07.02 |
메모리 구조 (Memory Architecture) (0) | 2020.07.02 |