안녕하세요
다름이 아니라 printf 를 분석 하려고 하거든요 pc에서 c 프로그램을 할때 printf를 쓰면은 어떻게 동작을 하는지 상세히 알고 싶습니다. 그래서 gcc나 glibc를 찾아 봣는데 잘 모르겠습니다.
소스가 어디에 있나요?
그리고 printf가 시스템 콜을 쓴다면 그 시스템 콜을 제 마음대로 변경 해 주면 제가 쓰고 싶은 대로 쓸수가 있나요?
그럼 답변 부탁드리겠습니다.
다름이 아니라 printf 를 분석 하려고 하거든요 pc에서 c 프로그램을 할때 printf를 쓰면은 어떻게 동작을 하는지 상세히 알고 싶습니다. 그래서 gcc나 glibc를 찾아 봣는데 잘 모르겠습니다.
소스가 어디에 있나요?
그리고 printf가 시스템 콜을 쓴다면 그 시스템 콜을 제 마음대로 변경 해 주면 제가 쓰고 싶은 대로 쓸수가 있나요?
그럼 답변 부탁드리겠습니다.
.
glibc에 보시면 다른 함수로 구현되어 있고, 결국 라이브러리에서 최하위 Layer에서는 write() 시스템 콜로 구현이 되어 있을겁니다.
write() 시스템 콜은 리눅스 커널에 소프트웨어 인터럽트를 발생시키고, 시스템 콜 번호에 따라 시스템콜 핸들러가 호출됩니다.
결국 유저 영역 write()는 리눅스 커널의 sys_write() 을 호출합니다.
Trace 해보시면 Layer가 상당히 많습니다. 차근차근 한개씩 분석하시다보면 크게 어렵지는 않을듯 합니다.
-----
시스템콜 변경도 물론 가능합니다. 리눅스 커널에 시스템콜 핸들러를 수정하시면 됩니다. 물론, 수정된 커널을 컴파일해서 설치해야합니다.
보통 시스템콜 테스트 할때는 기존 시스템 콜을 수정하는 방법보다는 새로운 시스템콜을 추가해서 합니다. 기존 시스템콜을 수정해버리면 OS가 오동작 할 여지가 크므로 조심해서 건드려야합니다.
리눅스 커널 서적에 '시스템콜' 관련된 파트를 참고하시면서 분석하시면 도움이 될것 같습니다.