zoukankan      html  css  js  c++  java
  • 用bfd显示ARM共享库的依赖关系

    转载时请注明出处和作者联系方式
    文章出处:http://www.limodev.cn/blog
    作者联系方式:李先静 <xianjimli at hotmail dot com>

    PC 上可以用ldd显示共享库的依赖关系,但它不能显示交叉编译出来的共享库。要显示交叉编译的共享库,通常做的法是在目标板上用/lib/ld- linux.so.2 –list来显示。那有点有麻烦,由于通常我们并不关心所依赖共享库的加载地址,所以自己写了小程序来实现这个功能,顺便学习一下BFD的使用方法。

    o 源代码

    static void show_so_dependance(bfd* b, asection* s)
    {
    char* str = NULL;
    char* buff = NULL;
    size_t length = 0;

    length = s->size;
    buff = (char*)malloc(length + 1);
    bfd_get_section_contents(b, s, buff, 0, length);
    buff[length] = '/0';

    for(str = buff; str < (buff + length); str += (strlen(str) + 1))
    {
    if(strstr(str, ".so") != NULL)
    {
    printf(" ");
    printf("%s/n", str);
    }
    }
    free(buff);

    return;
    }

    int main(int argc, char* argv[])
    {
    int i = 0;
    bfd* b = NULL;
    asection* s = NULL;
    char **matching = NULL;

    bfd_init();

    if(argc < 2)
    {
    printf("usage: %s filename/n", argv[0]);

    return 0;
    }

    b = bfd_openr(argv[1], NULL);
    if(bfd_check_format_matches (b, bfd_object, &matching))
    {
    if((s = bfd_get_section_by_name(b, ".dynstr")) != NULL)
    {
    show_so_dependance(b, s);
    }
    }
    bfd_close(b);

    return 0;
    }

    o 编译

    gcc -g depend_so.c -lbfd -liberty -o depend_so

    o使用方法

    [root@lixj bfd]# ./depend_so /usr/bin/xmlwf
    libexpat.so.1
    libc.so.6
    /lib/ld-linux.so.2

    代码请到这里下载。

  • 相关阅读:
    Activity生命周期回顾
    Android Camera拍照 压缩
    Android获取相册图片
    Android 常用系统控件
    Java synchronized详解
    Android输入法开发
    Android Toast和Notification
    Extjs 自定义控件
    在Extjs中动态增加控件
    数据库中存储js代码无法json解析
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6167570.html
Copyright © 2011-2022 走看看