read를 추적하는 방법을 알고싶습니다.
글쓴이: hermes / 작성시간: 목, 2012/04/26 - 2:44오후
시스템콜을 추적해서 동작 과정을 분석하게 되었습니다.
그런데 '시스템콜 추적'이라고 검색하면 strace 프로그램을 사용하라는 글밖에 보이지 않더군요.
저는 어떤 시스템콜들이 실행되고있는가가 아니라, 한 시스템콜이 내부적으로 어떤 함수를 호출하고, 또 그 함수들은 내부적으로 어떤 함수를 호출하는지를 알고싶은데 말이죠.. ㅠㅠ (그 중에서도 read 함수를 분석하고 싶은데 말이죠..)
일단 파일을 열어서 읽고 닫는 프로그램을 작성해 본 결과, read 함수는 glibc 안에 있을 거라는 결론을 내렸습니다.
그리고 glibc 소스를 다운받아서 read를 찾고 있는데...
이게 아무리 찾아봐도 보이질 않네요.. ㅠㅠ
대체 read 함수의 정의 부분은 어디에 있는 걸까요?
Forums:
시스템 콜은 커널에 있습니당....;;;;
(답글 달면 또 돌 날라올지도 모르겠지만)
시스템 콜 함수명을 아시면 리눅스 커널 내에서 찾으실 수 있으실 겁니다.
C 언에서 사용하는 read( ) 함수를 찾으시는 것이려나요...?
파일시스템에 대한 접근 함수이기 때문에,
내부 동작은 커널에서 확인하셔야 할 겁니다.
(나는 분명 M인가보다... 까이고 싶다... 아아...)
sys_read 도 알고 싶긴 하지만
우선은 read 함수부터 분석하여서
최종적으로 sys_read가 호출되기까지를 알아보려구요.
그리고 더 나아가서는 sys_read 내부도 어떻게 생겼는지 보고싶기는 하지만요.
우선은 read 함수부터 보려고 하는데 이건 glibc에 있지 않나 해서요.
read 함수 자체도 커널에 구현되어 있나요?
음... 어떤 read 인가에 따라서 다르긴 한데...
glibc 에서 unistd.h 에 있는 read 를 보시면, pread 로 연결되는 것을 보실겁니다.
실제 sys_read 까지 가는데에는 pread 를 통해 따라가시는 것이 좋습니다.
답글 감사합니다.
read 함수 부분은 겨우겨우 찾았습니다.
단지 그 함수 안에 내용이 도저히 이해가 안 되는 것이 문제로군요... ㅠㅠ
게다가 gcc의 __attribute__가 사용되니까 더욱 복잡한 것 같습니다.
어쨌든 답글 감사합니다. 많은 도움이 되었습니다.
댓글 달기