본문 바로가기
운영체제

파일 디스크립터

by meanjung 2021. 7. 10.

혼자 정리하는 거라서 앞 뒤 뻘글은 무시해도 됩니다


libc sendto를 후킹해 어떤 프로세스가 해당 함수를 실행했는지 알아내려고 한다. 불가능하다(사유는 맨 밑에)

여기서 sockfd.. socket file descriptor에서 뭔가를 건질 수 있지 않을까?


파일 디스크립터(fd)

socket과 같은 파일이나 기타 입출력 리소스에 접근할 때 사용되는 추상 표현.

즉, 시스템으로부터 할당받은 파일이나 소켓을 대표하는 정수.

- 음이 아닌 정수값. int로 표현된다.

 

- fd의 0-2번 까지는 고정. (unistd.h 헤더파일에 명시)

 

- 표준 입력, 표준 출력도 fd로 표현이 되는데, 이들은 프로그램이 시작되면 기본적으로 열리고, 종료시 자동으로 닫힌다.

  • 표준 입력 : fd 0
  • 표준 출력 : fd 1
  • 표준 에러 출력 : fd 2

파일 오픈 또는 소켓 생성 시 부여되는 fd는 3부터 시작이다.

프로세스가 실행 중에 파일을 오픈하면 커널은 해당 프로세스의 fd 숫자 중에 사용하지 않는 가장 작은 값을 할당해준다.

그 다음 프로세스가 열려있는 파일에 시스템 콜을 이용해 접근할 때, fd 값을 이용해 파일을 지칭할 수 있다.


서치중 비극적인 소식

작은 정수에 불과한 fd는 어떤 프로세스에 대해 이야기하고 있는지 이미 알고 있지 않는 한 의미가 없다.

https://stackoverflow.com/questions/20101983/it-is-possible-to-get-the-pid-from-a-given-file-descriptor-programmatically-usi


ld_preload= ~~ python ex.py 와 같은 방식으로 하면 된다..

 

'운영체제' 카테고리의 다른 글

OverlayFS 개념  (0) 2021.07.24
Samba  (0) 2021.07.11
LD_PRELOAD를 이용한 후킹  (0) 2021.07.08
공유 메모리  (0) 2021.07.08
리눅스 공유 메모리 개념 및 함수 설명  (0) 2021.07.06

댓글