用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

代码请到这里下载。

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...