이번에는 디버깅이나 리버싱에 매우 유용한 프로그램인 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 |