Studying Security

_IO_FILE 본문

개념 정리/_IO_FILE

_IO_FILE

J4guar 2022. 5. 11. 13:21
728x90
반응형

모든 파일 함수는 fopen함수에서 반환한 파일 포인터를 인자로 전달 받고 기능을 수행하기에 앞서 파일 포인터를 참조해 파일 정보(파일의 모드, 파일 작업을 수행하기 위한 함수의 주소)를 먼저 확인합니다.

 

이를 위해 파일 구조체파일 함수가 실행되는 과정을 이해합니다.

파일 구조체(_IO_FILE) 리눅스 시스템의 표준 라이브러리에서 파일 스트림을 나타내기 위한 구조체로 파일을 열기위한 fopen함수 사용할 때 힙 영역에 할당됩니다.

 

할당된 _IO_FILE 영역을 살펴보면 _IO_FILE_plus 구조체의 file 부분에 해당하고 이어서 vtable이 존재하는 것을 디버깅을 통해 확인할 수 있습니다.

<_IO_FILE_plus 구조체>
<_IO_FILE 구조체>

vtable(virtual function table)은 가상함수를 사용할 때 할당되는 테이블입니다.

메모리에 가상 함수를 담을 영역을 할당하고, 함수의 주소를 기록합니다.

파일 함수를 호출하면 해당 file descriptor의 vtable을 기준으로 offset을 통해 실제 기능을 수행하는 함수를 호출합니다.

<vtable>

어떤 구조를 띠고 있는지 확인했다면 각 멤버 변수가 무엇을 의미하는지 확인합니다.

<flags>

 

fopen 함수 호출

이 때 실행되는 내부 함수는 _IO_new_file_fopen으로 read_write, omode 변수들의 권한을 할당합니다.

Reference

 
반응형

'개념 정리 > _IO_FILE' 카테고리의 다른 글

_IO_FILE vtable  (0) 2022.05.13
_IO_FILE Arbitrary Address Write  (0) 2022.05.12
_IO_FILE Arbitrary Address Read  (0) 2022.05.12
Comments