Wyświetlanie informacji o bibliotece Linux / pliku wykonywalnym


37

W systemie Windows pliki EXE i DLL zawierają informacje o wersji, w tym co najmniej następujące pola:

  1. wersja pliku
  2. Wersja Produktu
  3. Nazwa wewnętrzna
  4. Nazwa produktu
  5. prawa autorskie

W bibliotece Linux / Plik wykonywalny:

  • Które pola są obecne?
  • Jak wyświetlić takie informacje?
  • Jakie narzędzia / biblioteki czytać?

zaktualizowałem jeszcze kilka rzeczy, sprawdź teraz ..
Rahul Patil

ldconfig potrzebujesz roota? Co powiesz na sprawdzenie konkretnego pliku libxxx.so i nie chcesz uruchamiać pliku exe z
opcją

nie ma potrzeby rootowania, ponieważ / sbin / path nie jest ustawiony w normalnym środowisku użytkownika, możesz wykonać to używając absolutnej ścieżki np. /sbin/ldconfig -p
Rahul Patil,

Odpowiedzi:


36

Informacje o wersji nie są jawnie przechowywane w pliku ELF . To, co tam masz, to nazwa biblioteki soname, która zawiera wersję główną. Pełna wersja jest zwykle przechowywana jako część nazwy pliku biblioteki.

Jeśli masz bibliotekę, powiedzmy libtest.so, to zazwyczaj masz:

  • libtest.so.1.0.1 - Sam plik biblioteki zawierający pełną wersję
  • libtest.so.1- Symlink do libtest.so.1.0.1, o takiej samej nazwie jaksoname
  • libtest.so- Symbol libtest.so.1dowiązania używany do łączenia.

W pliku biblioteki libtest.so.1.0.1znajdzie się wpis o nazwie SONAMEw sekcji dynamicznej, który powie, że ta biblioteka jest wywoływana libtest.so.1. Kiedy połączysz program z tą biblioteką, połączony program zapisze sonamebibliotekę pod NEEDEDpozycją w sekcji dynamicznej.

Jeśli chcesz sprawdzić, co dokładnie znajduje się w pliku ELF, możesz spróbować uruchomić:

readelf -a -W elffile

gdzie elffilemoże być biblioteka pliku wykonywalnego.

Jeśli chcesz po prostu pobrać wersję biblioteki, możesz grać z:

readelf -d  /path/to/library.so |grep SONAME

AFAIK, nie ma takich informacji (przynajmniej domyślnie) w plikach wykonywalnych.

Lub możesz polegać na samym programie lub systemie pakowania, jak napisał Rahul Patil.


fajna informacja, to dla mnie nowość, nigdy nie korzystałem z readelf, jeśli nie masz nic przeciwko, mogę zapytać, gdzie i dlaczego używać readelf
Rahul Patil

Readelf (i podobne narzędzia) jest przydatny, gdy chcesz zajrzeć do pliku elfa :). Używam go głównie podczas programowania do wyszukiwania symboli w bibliotekach (gdy coś nie działa) lub gdy jest jakiś problem z biblioteką. ( man readelf )
v154c1,

13

Możesz użyć ldconfig -v | grep libraryname, również polecenie ma opcję command -Vlubbinaryfile --version

przykład:

test@ubuntukrb12:~# ls --version
ls (GNU coreutils) 8.13
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

możesz także użyć yum lub aptitude w oparciu o dystrybucję, której używasz np.

w RHEL5 / CENTOS5 / Fedora możesz użyć yum info packagenamelub jeśli jest zainstalowany, użyjrpm --version packagename

 [root@ldap1 ~]# yum info bind97
    Loaded plugins: downloadonly, fastestmirror, security
    Loading mirror speeds from cached hostfile
     * base: mirrors.sin3.sg.voxel.net
     * epel: mirror.imt-systems.com
     * extras: mirrors.sin3.sg.voxel.net
     * updates: mirrors.sin3.sg.voxel.net
    Installed Packages
    Name       : bind97
    Arch       : i386
    Epoch      : 32
    Version    : 9.7.0
    Release    : 10.P2.el5_8.4
    Size       : 6.3 M
    Repo       : installed
    Summary    : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server
    URL        : http://www.isc.org/products/BIND/
    License    : ISC
    Description: BIND (Berkeley Internet Name Domain) is an implementation of the DNS
               : (Domain Name System) protocols. BIND includes a DNS server (named),
               : which resolves host names to IP addresses; a resolver library
               : (routines for applications to use when interfacing with DNS); and
               : tools for verifying that the DNS server is operating properly.

W Ubuntu możesz użyć aptitude show pkgnamelubdpkg --version pkgname

root@ubuntukrb12:~# aptitude show bind9utils
Package: bind9utils
State: installed
Automatically installed: yes
Version: 1:9.8.1.dfsg.P1-4ubuntu0.4
Priority: optional
Section: net
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Uncompressed Size: 306 k
Depends: libbind9-80, libc6 (>= 2.14), libdns81, libisc83, libisccc80, libisccfg82
Conflicts: bind9utils
Replaces: bind9 (<= 1:9.5.0~b2-1), bind9 (<= 1:9.5.0~b2-1)
Description: Utilities for BIND
 This package provides various utilities that are useful for maintaining a working BIND installation.

Za rpm, myślę, że chcesz rpm --query pkgnamedo listy ciąg wersji ( rpm --versionbędzie wydrukować wersję rpmsiebie, to samo może być prawdziwe w odniesieniu do dpkg)
hoc_age

5

W przypadku systemów opartych na Redhat wykonaj następujące czynności:

ldd [file you want to run] | > needed-packages

Sprawdź plik potrzebnych pakietów, upewnij się, że w nazwach plików bibliotek nie ma nazw ścieżek. Jeśli tak, usuń je, więc „/bin/lib/libx.so.1” zmień na „libx.so.1”

Dowiedz się, który pakiet zawiera bibliotekę

yum -y provides [lib name]

Lub umieść to w skrypcie lub uruchom z wiersza cmd:

for lib in `cat libs.txt`;
do
   yum -y provides $lib | head -2 | grep " : " >> packages.list
done

Następnie utwórz następujący skrypt lub uruchom z wiersza cmd:

for package in `cat packages.list | awk '{ print $1 }'`;
do
    yum -y install $package
done

Skończyłeś, uruchom swój program. Jeśli podczas uruchamiania pojawią się błędy GUI. Skopiuj je, a jeśli są odwołaniami do biblioteki, znajdź dla nich pakiety i zainstaluj w ten sam sposób.


2

Uruchom to, aby uzyskać informacje o wersji - strings libssl.so.1.0.0 | grep "1\.0"

SSLv3 part of OpenSSL 1.0.2p-fips  14 Aug 2018
OpenSSL 1.0.2p-fips  14 Aug 2018
TLSv1 part of OpenSSL 1.0.2p-fips  14 Aug 2018
DTLSv1 part of OpenSSL 1.0.2p-fips  14 Aug 2018
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.