ldd是一款Linux下的動(dòng)態(tài)連接庫(kù)查看工具,可以用來查看一個(gè)程序所需要的動(dòng)態(tài)庫(kù)信息。它的界面默認(rèn)是黑白色調(diào),不夠美觀,那么怎么才能給它添加顏色呢?下面提供一種方法。
1.使用LD_TRACE_LOADED_OBJECTS環(huán)境變量
使用這種方法需要在終端輸入以下命令:
exportLD_TRACE_LOADED_OBJECTS=1
ldd[文件名]
執(zhí)行后可以看到,命令行輸出顯示了很多顏色,其中綠色表示可執(zhí)行文件,藍(lán)色表示共享庫(kù),黃色表示數(shù)據(jù)段,紅色表示未加載的數(shù)據(jù)等等。
2.使用LD_COLOR環(huán)境變量
這種方法需要使用到LD_COLOR環(huán)境變量,需要在終端中使用以下命令:
exportLD_COLOR="yes"
ldd[文件名]
執(zhí)行后可以看到,界面將會(huì)出現(xiàn)各種顏色的字體,使整個(gè)界面更加美觀。
3.使用ldd的--color選項(xiàng)
ldd可以接受--color選項(xiàng),使用這個(gè)參數(shù)后,ldd的輸出同樣也會(huì)變成彩色的。具體方法是在終端中輸入以下命令:
ldd--color[文件名]
執(zhí)行后可以看到界面中出現(xiàn)了各種顏色的字體,跟方法二的效果基本一致。
4.使用LD_PRELOAD環(huán)境變量
使用這種方法需要先創(chuàng)建一個(gè)C程序來添加顏色,然后使用LD_PRELOAD環(huán)境變量來加載這個(gè)程序,具體方法如下:
編寫一個(gè)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函數(shù)的實(shí)現(xiàn)。最后將代碼保存為libcolor.c。然后在終端輸入以下命令:
gcc-fPIC-sharedlibcolor.c-olibcolor.so
exportLD_PRELOAD=$(pwd)/libcolor.so
ldd[文件名]
執(zhí)行后可以看到,ldd的各個(gè)輸出信息都被帶有顏色了,常見的錯(cuò)誤信息顏色也更加明顯。
5.使用lddtree工具
lddtree是一個(gè)輔助ldd的工具,它可以自動(dòng)將所有在執(zhí)行指定二進(jìn)制文件所需要用到的動(dòng)態(tài)庫(kù)或鏈接庫(kù)打印出來,并排列在一棵樹中,非常方便,同時(shí)它也支持顏色輸出,具體方法如下:
sudoapt-getinstalllddtree
lddtree-l-C[二進(jìn)制文件名]
執(zhí)行后可以看到,lddtree的輸出信息都帶有不同的顏色,而且比較明顯,也很容易區(qū)分。
6.使用其他軟件
也可以使用其他軟件來代替ldd實(shí)現(xiàn)上色的效果,例如gdb可以使用“display”命令來顯示某個(gè)變量的值,同時(shí)也可以顯示這個(gè)變量所屬的庫(kù)文件或者文件名,同時(shí)它也支持顏色輸出,非常方便。
這些就是ldd軟件怎么上色的幾種方法,根據(jù)自己的需要選擇即可。