Interpreting apptrace
Output
The following examples contain sample apptrace
output from tracing a simple one-binary application, ls
.
Example 12-1 Tracing in Default Mode
$ apptrace ls /etc/passwd
ls -> libc.so.1:atexit(func = 0xff3cb8f0) = 0x0
ls -> libc.so.1:atexit(func = 0x129a4) = 0x0
ls -> libc.so.1:getuid() = 0x32c3
ls -> libc.so.1:time(tloc = 0x23918) = 0x3b2fe4ef
ls -> libc.so.1:isatty(fildes = 0x1) = 0x1
ls -> libc.so.1:ioctl(0x1, 0x540d, 0xffbff7ac)
ls -> libc.so.1:ioctl(0x1, 0x5468, 0x23908)
ls -> libc.so.1:setlocale(category = 0x6, locale = "") = "C"
ls -> libc.so.1:calloc(nelem = 0x1, elsize = 0x40) = 0x23cd0
ls -> libc.so.1:lstat64(path = "/etc/passwd", buf = 0xffbff6b0) = 0x0
ls -> libc.so.1:acl(pathp = "/etc/passwd", cmd = 0x3, nentries = 0x0,
aclbufp = 0x0) = 0x4
ls -> libc.so.1:qsort(base = 0x23cd0, nel = 0x1, width = 0x40,
compar = 0x12038)
ls -> libc.so.1:sprintf(buf = 0x233d0, format = 0x12af8, ...) = 0
ls -> libc.so.1:strlen(s = "") = 0x0
ls -> libc.so.1:strlen(s = "/etc/passwd") = 0xb
ls -> libc.so.1:sprintf(buf = 0x233d0, format = 0x12af8, ...) = 0
ls -> libc.so.1:strlen(s = "") = 0x0
ls -> libc.so.1:printf(format = 0x12ab8, ...) = 11
ls -> libc.so.1:printf(/etc/passwd
format = 0x12abc, ...) = 1
ls -> libc.so.1:exit(status = 0)
The previous example shows the default tracing behavior, tracing every library call on the command ls
/etc/passwd
. The apptrace
utility prints a line of output for every system call, indicating:
-
The name of the call
-
The library the call is in
-
The arguments and return values of the call
The output from ls
is mixed in with the apptrace
output.
Example 12-2 Tracing Selectively
$ apptrace -t \*printf ls /etc/passwd
ls -> libc.so.1:sprintf(buf = 0x233d0, format = 0x12af8, ...) = 0
ls -> libc.so.1:sprintf(buf = 0x233d0, format = 0x12af8, ...) = 0
ls -> libc.so.1:printf(format = 0x12ab8, ...) = 11
ls -> libc.so.1:printf(/etc/passwd
format = 0x12abc, ...) = 1
The previous example shows how apptrace
can selectively trace calls with regular-expression syntax. In the example, calls to interfaces ending in printf
(), which include sprintf
(), are traced in the same ls
command as before. Consequently, apptrace
only traces the printf
() and sprintf
() calls.
Example 12-3 Tracing in Verbose Mode
$ apptrace -v sprintf ls /etc/passwd ls -> libc.so.1:sprintf(buf = 0x233d0, format = 0x12af8, ...) = 0 buf = (char *) 0x233d0 "" format = (char *) 0x12af8 "%s%s%s" ls -> libc.so.1:sprintf(buf = 0x233d0, format = 0x12af8, ...) = 0 buf = (char *) 0x233d0 "" format = (char *) 0x12af8 "%s%s%s" /etc/passwd
The previous example shows the verbose tracing mode, where the arguments to sprintf
() are printed on multiple output lines for readability. At the end, apptrace
displays the output of the ls
command.