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

前端之家收集整理的这篇文章主要介绍了用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,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

代码请到这里下载。

猜你在找的设计模式相关文章