V prostředí operačního systému Linux jsou binární spustitelné soubory spojené s aplikacemi/programy, které chcete spouštět, přímo propojeny se sdílenými knihovnami načtenými za běhu.
Jako zvědavý a vyvíjející se uživatel Linuxu budete v pokušení získat představu o těchto sdílených knihovnách zapojených/propojených s binárními spustitelnými soubory, které spouštíte během normálního spouštění programu.
Tento článek nás provede několika způsoby, jak zjistit všechny sdílené knihovny používané spustitelnými soubory v Linuxu.
Stručný přehled o linuxových knihovnách
Programátor nebo uživatel obeznámený se světem programování definuje knihovnu jako předem zkompilované části kódu/segmenty sestavené dohromady v organizovaném způsobu/formátu. Díky předkompilované povaze/atributu knihovny je flexibilně a snadno znovu použitelná mezi různými programy.
V rámci architektury operačního systému Linux můžeme knihovny kategorizovat jako statické (statické knihovny ) nebo sdíleno (sdílené knihovny ).
Statické knihovny jsou staticky vázány na konkrétní program a jsou přístupné pouze během doby kompilace programu. Sdílené knihovny se stanou aktivními po spuštění programu a budou umístěny v paměti po dobu běhu programu.
Jak najít sdílené knihovny programu v Linuxu
Před určením sdílených knihoven přidružených k cílovému programu musíte nejprve vědět, kde se nachází spustitelný soubor spojený s vaším programem. V Linuxu je umístění spustitelných souborů vašich programů obvykle uvnitř /usr/bin adresář.
$ ls -l /usr/bin
Sloupec zcela vpravo uvádí názvy spustitelných souborů vašich programů.
Najděte sdílené knihovny linuxového programu pomocí příkazu ldd
ldd existuje jako přímý skript shellu, který ukazuje na sdílené knihovny programu. Podle výše uvedeného snímku obrazovky se například pokusme o výstup sdílených knihoven spojených s aplikací anydesk.
Umístění spustitelného souboru Anydesku bychom mohli určit příkazem:
$ whereis anydesk
Chcete-li určit své sdílené knihovny pomocí ldd příkaz, provedeme:
$ ldd /usr/bin/anydesk
Jak můžete vidět, máme seznam četných knihoven spojených s anydesk aplikace. Upozorňujeme, že ldd příkaz má tendenci spouštět dotazované programy a získávat informace o sdílených knihovnách. Proto přiřaďte příkaz pouze k důvěryhodným spustitelným souborům.
Najděte programově sdílené knihovny pomocí příkazů objdump a grep
objdump příkaz je součástí GNU Binutils balíček se zaměří na zobrazení informací o souborech objektů, zatímco grep příkaz zobrazí seznam přidružených sdílených knihoven programu.
Podívejme se, co tyto příkazy přinesou programu jako whois používá se pro informace o názvech domén.
$ whereis whois
Dále zjistěte sdílené knihovny programu.
$ objdump -p /usr/bin/whois | grep 'NEEDED'
Jak vidíte, whois spustitelný program pro vyhledávání domén je spojen se dvěma sdílenými knihovnami.
Případně můžete také použít readelf příkaz k načtení sdílených informací pro spustitelný soubor programu zip.
$ whereis zip $ readelf --dynamic /usr/bin/zip | grep NEEDED
Podle výstupu zip spustitelný program je spojen se dvěma sdílenými knihovnami.
Najděte sdílené knihovny pomocí příkazu Awk
Tato možnost je ideální pro program, který již běží. Nejprve potřebujeme získat jeho PID (ID procesu ). Řekněme například, že máme Flameshot běží nástroj pro snímání obrazovky.
Chcete-li získat jeho PID , spustíme:
$ pgrep flameshot 45261
Naše /proc/
$ awk '$NF!~/\.so/{next} {$0=$NF} !a[$0]++' /proc/45261/maps
Nyní jsme dobře obeznámeni se seznamem všech sdílených knihoven spojených se spustitelnými soubory v Linuxu.