티스토리 뷰

os/Linux

strace

Jacob_baek 2012. 6. 7. 14:05

strace는?

시스템콜 및 시그널을 추적하는 명령어

프로그램의 문제를 분석하는 디버깅하는 용도로 사용됨.


사용법은 ID 혹은 Command 로 나뉘어 추적할수 있다.

 


usage: strace [-CdffhiqrtttTvVwxxy] [-I n] [-e expr]...
              [-a column] [-o file] [-s strsize] [-P path]...
              -p pid... / [-D] [-E var=val]... [-u username] PROG [ARGS]
   or: strace -c[dfw] [-I n] [-e expr]... [-O overhead] [-S sortby]
              -p pid... / [-D] [-E var=val]... [-u username] PROG [ARGS]

사용했던 option은 다음과 같다.

  -f             follow forks
  -o file        send trace output to FILE instead of stderr
  -tt            print absolute timestamp with usecs
  -s strsize     limit length of print strings to STRSIZE chars (default 32)
  -p pid         trace process with process id PID, may be repeated

사용법

다음과 같은 예시를 따라할 수 있다.

참고로 vsftpd를 기존에 설치하여 동작중일때 아래와 같은 pid확인 및 strace사용이 가능하다.


[root@server ~]# ps aux | grep vsftpd  | grep -v "grep" | awk '{print $2}'
[root@server ~]# yum install strace -y
[root@server ~]# strace -f -o /tmp/vsftpd.strace -s 1024 -tt -p 3301


[root@client ~]# ftp 10.10.10.10


[root@server ~]# ## "ctrl + c"

[root@server ~]# vim /tmp/vsftpd.strace

아래와 같이 함수호출과정에 대한 확인이 가능하다.


26937 15:21:23.305953 fstat(3, {st_mode=S_IFREG|0755, st_size=61624, ...}) = 0
26937 15:21:23.306014 mmap(NULL, 2173016, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f30ed439000
26937 15:21:23.306071 mprotect(0x7f30ed445000, 2093056, PROT_NONE) = 0
26937 15:21:23.306128 mmap(0x7f30ed644000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xb000) = 0x7f30ed644000
26937 15:21:23.306200 mmap(0x7f30ed646000, 22616, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f30ed646000
26937 15:21:23.306263 close(3)          = 0
26937 15:21:23.306386 mprotect(0x7f30ed644000, 4096, PROT_READ) = 0
26937 15:21:23.306445 munmap(0x7f30f0bc6000, 29570) = 0
26937 15:21:23.306511 open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
26937 15:21:23.306646 fstat(3, {st_mode=S_IFREG|0644, st_size=3236, ...}) = 0
26937 15:21:23.306722 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f30f0bcd000

이를 통해 buffer overflow가 발생시 troubleshooting도 가능하다.


혹 Red Hat Enterprise Linux를 사용하는 경우 debuginfo-install을 통해 symbol을 설치하여 gdb를 통한 trouble shooting도 가능하다.


[root@client ~]# debuginfo-install ftp
[root@client ~]# gdb ftp 10.10.10.10

참고사이트

http://linux.die.net/man/1/strace

'os > Linux' 카테고리의 다른 글

ssh certification  (0) 2014.09.01
desktop icon execution of root privilege in ubuntu  (0) 2013.05.13
standard streams  (0) 2013.04.12
ssh character encoding  (0) 2013.03.15
vim (vi)  (0) 2012.09.10
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함