加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

用bfd显示ARM共享库的依赖关系

发布时间:2020-12-13 20:33:41 所属栏目:百科 来源:网络整理
导读:转载时请注明出处和作者联系方式 文章出处:http://www.limodev.cn/blog 作者联系方式:李先静 xianjimli at hotmail dot com PC 上可以用ldd显示共享库的依赖关系,但它不能显示交叉编译出来的共享库。要显示交叉编译的共享库,通常做的法是在目标板上用/li

转载时请注明出处和作者联系方式
文章出处: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,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

代码请到这里下载。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读