web-dev-qa-db-fra.com

Affichage des informations sur la version de la bibliothèque Linux / exécutable

Sous Windows, EXE et DLL ont des informations de version, y compris au moins les champs suivants:

  1. version du fichier
  2. version de produit
  3. nom interne
  4. nom du produit
  5. droits d'auteur

Dans la bibliothèque Linux/exécutable:

  • Quels champs sont présents?
  • Comment afficher ces informations?
  • Quels outils/bibliothèques lire?
41
linquize

Les informations de version ne sont pas explicitement stockées dans n fichier ELF . Vous y trouverez le nom de la bibliothèque, le soname, qui inclut la version principale. La version complète est généralement stockée en tant que partie du nom de fichier de bibliothèque.

Si vous avez une bibliothèque, dites libtest.so, alors vous avez généralement:

  • libtest.so.1.0.1 - Le fichier de bibliothèque lui-même, contenant la version complète
  • libtest.so.1 - Lien symbolique vers libtest.so.1.0.1, portant le même nom que soname
  • libtest.so - Lien symbolique vers libtest.so.1 utilisé pour la liaison.

Dans le fichier bibliothèque libtest.so.1.0.1, il y aura une entrée appelée SONAME dans la section dynamique, qui dira que cette bibliothèque s'appelle libtest.so.1. Lorsque vous liez un programme à cette bibliothèque, le programme lié stockera le soname de la bibliothèque sous NEEDED entrée dans la section dynamique.

Si vous voulez vérifier ce qui se trouve exactement dans quel fichier ELF, vous pouvez essayer d'exécuter:

readelf -a -W elffile

elffile peut être soit une bibliothèque d'un exécutable.

Si vous voulez simplement obtenir la version bibliothèque, vous pouvez jouer avec:

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

AFAIK, il n'y a pas de telles informations (du moins pas par défaut) dans les fichiers exécutables.

Ou vous pouvez compter sur le programme lui-même ou sur votre système d'emballage, comme l'a écrit Rahul Patil.

39
v154c1

Vous pouvez utiliser ldconfig -v | grep libraryname, la commande a également l'option command -V ou binaryfile --version

exemple :

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.

vous pouvez également utiliser yum ou aptitude basé sur la distribution que vous utilisez, par exemple.

dans RHEL5/CENTOS5/Fedora, vous pouvez utiliser yum info packagename ou s'il est installé, utilisez rpm --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.

Dans Ubuntu, vous pouvez utiliser aptitude show pkgname ou dpkg --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 <[email protected]>
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.
14
Rahul Patil

Pour les systèmes basés sur Redhat, procédez comme suit:

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

Vérifiez le fichier des packages nécessaires, assurez-vous qu'il n'y a pas de nom de chemin dans les noms de fichier de bibliothèque. Si c'est le cas, supprimez-les, donc "/bin/lib/libx.so.1" changez en "libx.so.1"

Découvrez quel paquet contient la bibliothèque

yum -y provides [lib name]

Ou mettez-le dans un script ou exécutez à partir de la ligne cmd:

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

Ensuite, créez le script suivant ou exécutez à partir de la ligne cmd:

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

Vous avez terminé, exécutez votre programme. Si vous obtenez des erreurs GUI lors de l'exécution. Copiez-les et s'il s'agit de références de bibliothèque, recherchez les packages pour celles-ci et installez-les de la même manière.

5
JMirabile

Exécutez ceci pour obtenir des informations sur la version - 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
4
yarick