strace

agnusdei·2024년 7월 28일
0

strace는 Linux에서 시스템 호출 및 신호를 추적하는 유틸리티입니다. 이를 통해 프로그램이 어떤 시스템 호출을 수행하는지, 어떤 파일을 열고 읽고 쓰는지, 네트워크 통신을 하는지 등을 분석할 수 있습니다. 이는 디버깅 및 성능 최적화, 문제 해결에 매우 유용합니다.

strace 기본 사용법

strace [옵션] [프로그램] [인수...]

주요 옵션

  • -o 파일: 출력을 지정한 파일로 저장합니다.
  • -e expr: 추적할 이벤트를 지정합니다. 예를 들어, -e trace=read,writereadwrite 시스템 호출만 추적합니다.
  • -p PID: 이미 실행 중인 프로세스를 추적합니다.
  • -c: 시스템 호출 요약을 제공합니다.
  • -f: 자식 프로세스도 추적합니다.
  • -r: 시스템 호출 전후의 상대적인 시간 간격을 표시합니다.
  • -t: 각 시스템 호출의 타임스탬프를 표시합니다.
  • -v: 시스템 호출의 모든 인수를 상세하게 표시합니다.

예제

  1. 프로그램 실행 추적

    strace ls
  2. 출력을 파일로 저장

    strace -o output.txt ls
  3. 특정 시스템 호출만 추적

    strace -e trace=open,read,write ls
  4. 이미 실행 중인 프로세스 추적

    strace -p 1234
  5. 자식 프로세스도 추적

    strace -f ls
  6. 시스템 호출 요약

    strace -c ls
  7. 상대 시간 간격 표시

    strace -r ls
  8. 타임스탬프 표시

    strace -t ls
  9. 모든 인수 상세 표시

    strace -v ls

실전 사용 예

  1. 네트워크 프로그램 디버깅
    네트워크 프로그램이 특정 호스트에 연결되지 않는 문제를 디버깅할 때 유용합니다.

    strace -e trace=network curl http://example.com
  2. 파일 접근 문제 해결
    파일이 존재하는데도 프로그램이 파일을 찾지 못할 때, 어떤 경로를 검색하는지 확인할 수 있습니다.

    strace -e trace=file ls /nonexistentfile
  3. 프로세스가 무한 루프에 빠졌을 때
    프로세스가 어떤 시스템 호출을 반복해서 수행하는지 확인할 수 있습니다.

    strace -p 1234 -r -t

strace의 출력 해석

strace의 출력은 시스템 호출의 순서와 그에 대한 응답을 보여줍니다. 예를 들어:

open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3

이 라인은 open 시스템 호출이 /etc/ld.so.cache 파일을 읽기 전용으로 열려고 시도했고, 파일 디스크립터 3을 반환했다는 것을 의미합니다.

strace는 시스템 호출의 실패 원인도 표시합니다:

open("/nonexistentfile", O_RDONLY) = -1 ENOENT (No such file or directory)

이 경우, open 호출이 ENOENT 오류로 실패했음을 나타내며, 이는 해당 파일이 존재하지 않는다는 의미입니다.

strace를 통해 시스템 호출을 추적하면 프로그램의 내부 동작을 더 잘 이해할 수 있으며, 문제 해결과 성능 최적화에 큰 도움이 됩니다.

profile
DevSecOps ⚙️ + CTF🚩

0개의 댓글