zoukankan      html  css  js  c++  java
  • 静态编译ltrace

           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 $@

    $ cat /usr/bin/ld
    #!/bin/sh
    
    ld.bin -static $@
    
    然后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





  • 相关阅读:
    UNIX网络编程--学习日记
    VC下ffmpeg例程调试报错处理
    Cholesky Decomposition
    [置顶] ORM框架Hibernate (二) 对象到关系多对一映射
    [置顶] rails2 升级到 rails3 过程详细记录
    python 连接MYSQL数据库(入门帖)
    【PAT】1005 Spell It Right
    Eclipse & MyEclipse下常用快捷键介绍
    HDU 2544
    你如何只用一个数组实现三个栈?
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7340553.html
Copyright © 2011-2022 走看看