Visualizzazione della libreria Linux / informazioni sulla versione eseguibile


38

In Windows, EXE e DLL hanno informazioni sulla versione, inclusi almeno i seguenti campi:

  1. versione del file
  2. versione del prodotto
  3. nome interno
  4. nome del prodotto
  5. diritto d'autore

Nella libreria Linux / eseguibile:

  • Quali campi sono presenti?
  • Come visualizzare tali informazioni?
  • Quali strumenti / librerie leggere?

Ho aggiornato alcune altre cose, per favore, controlla adesso ..
Rahul Patil,

ldconfig ha bisogno di root? Che ne dici di controllare un file libxxx.so specifico e non vuoi eseguire un exe con --version (potrebbe non funzionare)
linquize

non è necessario root, poiché / sbin / path non è impostato nel normale ambiente utente, è possibile eseguire quel percorso usando ad esempio il percorso assoluto. /sbin/ldconfig -p
Rahul Patil,

Risposte:


36

Le informazioni sulla versione non sono memorizzate in modo esplicito in un file ELF . Quello che hai dentro è il nome della libreria, the soname, che include la versione principale. La versione completa viene generalmente memorizzata come parte del nome del file della libreria.

Se hai una libreria, diciamo libtest.so, allora di solito hai:

  • libtest.so.1.0.1 - Il file della libreria stesso, contenente la versione completa
  • libtest.so.1- Collegamento simbolico a libtest.so.1.0.1, con lo stesso nome disoname
  • libtest.so- Symlink libtest.so.1utilizzato per il collegamento.

Nel file della libreria libtest.so.1.0.1, ci sarà una voce chiamata SONAMEnella sezione dinamica, che dirà che questa libreria è chiamata libtest.so.1. Quando si collega un programma a questa libreria, il programma collegato memorizzerà la voce sonamedella libreria NEEDEDnella sezione dinamica.

Se vuoi verificare cosa si trova esattamente in quale file ELF, puoi provare a eseguire:

readelf -a -W elffile

dove elffilepuò essere una libreria di un eseguibile.

Se vuoi semplicemente ottenere la versione della libreria, puoi giocare con:

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

AFAIK, non ci sono tali informazioni (almeno non di default) nei file eseguibili.

Oppure puoi fare affidamento sul programma stesso o sul tuo sistema di packaging, come ha scritto Rahul Patil.


belle informazioni, è una novità per me non mi sono mai usato, se non ti dispiace, posso chiederti dove e perché usarlo
Rahul Patil,

Readelf (e strumenti simili) è utile quando vuoi guardare dentro un file elf :). Lo uso principalmente durante la programmazione per cercare simboli nelle librerie (quando qualcosa non funziona) o quando c'è qualche problema con una libreria. ( man readly )
v154c1

13

Puoi usare ldconfig -v | grep libraryname, anche il comando ha un'opzione command -Vobinaryfile --version

esempio :

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.

inoltre puoi usare yum o aptitude in base alla distro che stai usando ad es.

in RHEL5 / CENTOS5 / Fedora è possibile utilizzare yum info packagenameo, se installato, utilizzarerpm --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.

In Ubuntu è possibile utilizzare aptitude show pkgnameodpkg --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.

Per rpm, penso che vorrai rpm --query pkgnameelencare la stringa di versione ( rpm --versionstamperà la versione di rpmse stessa; lo stesso potrebbe valere per dpkg)
hoc_age

5

Per i sistemi basati su Redhat, procedere come segue:

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

Controlla il file dei pacchetti necessari, assicurati che non ci siano nomi di percorso nei nomi dei file della libreria. In tal caso, rimuovili, quindi "/bin/lib/libx.so.1" cambia in "libx.so.1"

Scopri quale pacchetto contiene la libreria

yum -y provides [lib name]

Oppure inseriscilo in uno script o eseguilo dalla riga cmd:

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

Quindi, crea il seguente script o esegui dalla riga cmd:

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

Hai finito, avvia il tuo programma. Se si verificano errori della GUI durante l'esecuzione. Copiarli e, se sono riferimenti alla libreria, trovare i pacchetti per quelli e installarli allo stesso modo.


2

Esegui questo per ottenere informazioni sulla versione - 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.