ltrace能够跟踪进程的库函数调用,它会显现出哪个库函数被调用,而strace则是跟踪程序的每个系统调用. 有时候仅仅使用strace还是不够的,需要ltrace配合才能找出问题出在哪里。
如果在busybox上使用二进制工具需要编译成静态的,strace还好说,在静态编译ltrace 时候试了很多种方式最后得到的ltrace 用file查看 都是动态链接的:
$ file ltrace ltrace: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=a16c4dbd96628a9ee39bd0c620a60d2c73f57af0, not stripped
真让人蛋疼,后来根据网友编译32位程序受到启发终于找到了一种静态编译的方式:
首先 sudo apt-get install libelf-dev 否则configure 的时候会提示错误找不到 *elf.h 头文件。
然后用配置
ltrace-0.7.3$ ./configure CFLAGS=-static LDFLAGS=-static --disable-shared
剩下的就是make 编译了,在编译之前仿照 在64位linux下编译32位程序 首先把 /usr/bin/gcc和/usr/bin/ld都改名为*.bin,就是改为: /usr/bin/gcc.bin和/usr/bin/ld.bin
然后创建gcc 和ld 脚本文件:
$ cat /usr/bin/gcc #!/bin/sh gcc.bin -static [email protected]
$ cat /usr/bin/ld #!/bin/sh ld.bin -static [email protected]
然后meke ,即可得到静态链接的ltrace文件:
$ file ltrace ltrace: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.24, BuildID[sha1]=0x34894b8c81619a321d205908fd24327d1d44850a, not stripped
静态编译ltrace
时间: 2024-11-06 11:05:03