ldd是一款Linux下的动态连接库查看工具,可以用来查看一个程序所需要的动态库信息。它的界面默认是黑白色调,不够美观,那么怎么才能给它添加颜色呢?下面提供一种方法。
1.使用LD_TRACE_LOADED_OBJECTS环境变量
使用这种方法需要在终端输入以下命令:
exportLD_TRACE_LOADED_OBJECTS=1
ldd[文件名]
执行后可以看到,命令行输出显示了很多颜色,其中绿色表示可执行文件,蓝色表示共享库,黄色表示数据段,红色表示未加载的数据等等。
2.使用LD_COLOR环境变量
这种方法需要使用到LD_COLOR环境变量,需要在终端中使用以下命令:
exportLD_COLOR="yes"
ldd[文件名]
执行后可以看到,界面将会出现各种颜色的字体,使整个界面更加美观。
3.使用ldd的--color选项
ldd可以接受--color选项,使用这个参数后,ldd的输出同样也会变成彩色的。具体方法是在终端中输入以下命令:
ldd--color[文件名]
执行后可以看到界面中出现了各种颜色的字体,跟方法二的效果基本一致。
4.使用LD_PRELOAD环境变量
使用这种方法需要先创建一个C程序来添加颜色,然后使用LD_PRELOAD环境变量来加载这个程序,具体方法如下:
编写一个C程序,例如下面的代码:
#include<stdio.h>
#include<dlfcn.h>
void*(*real_dlsym)(void*,constchar*);
volatileintenable_color=1;
void*dlsym(void*handle,constchar*symbol)
{
if(real_dlsym==NULL)
{
real_dlsym=dlsym(RTLD_NEXT,"dlsym");
}
if(strcmp(symbol,"write")==0)
{
void*ptr=real_dlsym(handle,symbol);
returnptr;
}
returnreal_dlsym(handle,symbol);
}
ssize_twrite(intfd,constvoid*buf,size_tcount)
{
if(enable_color)
{
constchar*reset="\033[0m";
constchar*green="\033[32m";
constchar*red="\033[31m";
constchar*yellow="\033[33m";
if(count>=7&&memcmp(buf,"ldd:",4)==0&&memcmp(buf+4,"warning:",9)==0)
{
constchar*p=buf+strlen("ldd:warning:");
if(strncmp("cannotresolvesymbol",p,22)==0)
{
write(fd,red,strlen(red));
write(fd,"Error:",strlen("Error:"));
write(fd,reset,strlen(reset));
enable_color=0;
}
elseif(strncmp("skippedincompatiblelibrary",p,28)==0)
{
write(fd,yellow,strlen(yellow));
write(fd,buf,count);
write(fd,reset,strlen(reset));
}
else
{
write(fd,green,strlen(green));
write(fd,buf,count);
write(fd,reset,strlen(reset));
}
returncount;
}
}
上述代码中通过LD_PRELOAD变量来替换write函数的实现。最后将代码保存为libcolor.c。然后在终端输入以下命令:
gcc-fPIC-sharedlibcolor.c-olibcolor.so
exportLD_PRELOAD=$(pwd)/libcolor.so
ldd[文件名]
执行后可以看到,ldd的各个输出信息都被带有颜色了,常见的错误信息颜色也更加明显。
5.使用lddtree工具
lddtree是一个辅助ldd的工具,它可以自动将所有在执行指定二进制文件所需要用到的动态库或链接库打印出来,并排列在一棵树中,非常方便,同时它也支持颜色输出,具体方法如下:
sudoapt-getinstalllddtree
lddtree-l-C[二进制文件名]
执行后可以看到,lddtree的输出信息都带有不同的颜色,而且比较明显,也很容易区分。
6.使用其他软件
也可以使用其他软件来代替ldd实现上色的效果,例如gdb可以使用“display”命令来显示某个变量的值,同时也可以显示这个变量所属的库文件或者文件名,同时它也支持颜色输出,非常方便。
这些就是ldd软件怎么上色的几种方法,根据自己的需要选择即可。