본문 바로가기

Talks/HtP's Talks

디버깅에 유용한 툴 소개 (strace, ltrace)

이번에는 디버깅이나 리버싱에 매우 유용한 프로그램인 strace 와 ltrace에 대해서 소개하겠다.


1. strace


   이 프로그램은 system call 이 있을때마다 이에 대한 정보들을 추적해 화면에 표시해준다.

글쓴이가 사용한 Ubuntu에는 기본으로 깔려있다. Debian GNU/Linux의 경우, 만약 깔려있지 않다면 apt-get을 이용하여 설치할 수 있다.

   기본적인 사용법은 다음과 같다.

1
$strace [program name | -p PID]
cs



   위의 스크린샷은 "Hello, World!"를 화면에 찍어주는 간단한 프로그램을 작성한 뒤, strace로 실행시켜본 결과이다. 보면 알 수 있듯이, system call들의 흐름에 따라 각 system call에 어떤 인자들이 전달되고, 결과값은 얼마인지 자세하게 볼 수 있다. 우리는 이를 이용하여 프로그램이 어떻게 커널과 작업하는지, 전체 프로그램에서 어느 부분에 문제가 있는지 살펴볼 수 있다.



2. ltrace


   이 프로그램은 공유 라이브러리 함수 호출을 추적해 화면에 표시해준다. 이 또한 글쓴이가 사용한 Ubuntu에는 기본으로 깔려있다. 그리고 Debian GNU/Linux의 경우, 만약 깔려있지 않다면 apt-get을 이용하여 설치할 수 있다.

   기본적인 사용법은 다음과 같다.

1
$ltrace [program name | -p PID]
cs



   위의 스크린샷은 1.strace와 동일한 프로그램을 ltrace로 실행시켜본 결과이다. 모든 system call 들의 호출 흐름을 표시해주는 strace와는 달리, ltrace는 공유라이브러리인 libc 안의 함수호츨 흐름을 표시해준다. ./test 프로그램은 단순히 화면에 문자열을 뿌려주는 프로그램이므로 libc의 puts()만을 이용한 것을 확인할 수 있다.


'Talks > HtP's Talks' 카테고리의 다른 글

fiddler 소개  (0) 2015.02.06
Python으로 구현한 로그인 유지 (쿠키 이용)  (0) 2015.01.23
Python의 iterator, generator  (1) 2015.01.17