Xem thư viện Linux / thông tin phiên bản thực thi


37

Trong Windows, EXE và DLL có thông tin phiên bản, bao gồm ít nhất các trường sau:

  1. Phiên bản tập tin
  2. phiên bản sản phẩm
  3. tên nội địa
  4. tên sản phẩm
  5. bản quyền

Trong Thư viện Linux / Có thể thực thi:

  • Những lĩnh vực có mặt?
  • Làm thế nào để xem thông tin đó?
  • Những công cụ / thư viện để đọc?

tôi đã cập nhật thêm một số điều xin vui lòng kiểm tra ngay bây giờ ..
Rahul Patil

ldconfig cần root? Điều gì về việc kiểm tra một tệp libxxx.so cụ thể và không muốn thực thi một exe với --version (nó có thể thất bại)
linquize

không cần root, vì / sbin / path không được đặt trong Môi trường người dùng thông thường, bạn có thể thực thi việc sử dụng đường dẫn tuyệt đối, vd. /sbin/ldconfig -p
Rahul Patil

Câu trả lời:


36

Thông tin phiên bản không được lưu trữ rõ ràng trong tệp ELF . Những gì bạn có trong đó là tên của thư viện, sonamebao gồm phiên bản chính. Phiên bản đầy đủ thường được lưu trữ như một phần của tên tệp thư viện.

Nếu bạn có thư viện, hãy nói libtest.so, sau đó bạn thường có:

  • libtest.so.1.0.1 - Bản thân tệp thư viện, chứa phiên bản đầy đủ
  • libtest.so.1- Symlink đến libtest.so.1.0.1, có cùng tên vớisoname
  • libtest.so- Symlink để libtest.so.1sử dụng để liên kết.

Trong tệp thư viện libtest.so.1.0.1, sẽ có một mục được gọi SONAMEtrong phần động, sẽ cho biết thư viện này được gọi libtest.so.1. Khi bạn liên kết một chương trình với thư viện này, chương trình được liên kết sẽ lưu trữ sonamethư viện dưới NEEDEDmục nhập trong phần động.

Nếu bạn muốn xác minh, chính xác là trong tệp ELF nào, bạn có thể thử chạy:

readelf -a -W elffile

nơi elffilecó thể là một thư viện của một thực thi.

Nếu bạn chỉ muốn lấy phiên bản thư viện, bạn có thể chơi với:

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

AFAIK, không có thông tin như vậy (ít nhất là không theo mặc định) trong các tệp thi hành.

Hoặc bạn có thể dựa vào chính chương trình hoặc hệ thống đóng gói của bạn, như Rahul Patil đã viết.


Thông tin hay, nó mới đối với tôi chưa bao giờ sử dụng, nếu bạn không phiền, tôi có thể hỏi bạn ở đâu & tại sao lại sử dụng
Rahul Patil

Readelf (và các công cụ tương tự) rất hữu ích, khi bạn muốn xem bên trong tệp elf :). Tôi sử dụng nó chủ yếu khi lập trình để tìm kiếm các biểu tượng trong thư viện (khi một cái gì đó không hoạt động) hoặc khi có vấn đề với thư viện. ( người đàn ông sẵn sàng )
v154c1

13

Bạn có thể sử dụng ldconfig -v | grep libraryname, lệnh cũng có tùy chọn command -Vhoặcbinaryfile --version

thí dụ :

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.

ngoài ra, bạn có thể sử dụng yum hoặc aptitude dựa trên distro bạn đang sử dụng, vd.

trong RHEL5 / CENTOS5 / Fedora bạn có thể sử dụng yum info packagenamehoặc nếu nó được cài đặt thì hãy sử dụngrpm --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.

Trong Ubuntu Bạn có thể sử dụng aptitude show pkgnamehoặcdpkg --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.

Đối với rpm, tôi nghĩ bạn sẽ muốn rpm --query pkgnameliệt kê chuỗi phiên bản ( rpm --versionsẽ in phiên bản của rpmchính nó; điều tương tự cũng có thể đúng dpkg)
hoc_age

5

Đối với các hệ thống dựa trên Redhat làm điều này:

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

Kiểm tra tệp gói cần thiết, đảm bảo không có tên đường dẫn trong tên tệp thư viện. Nếu vậy hãy loại bỏ chúng, vì vậy "/bin/lib/libx.so.1" thay đổi thành "libx.so.1"

Tìm hiểu gói nào chứa thư viện

yum -y provides [lib name]

Hoặc đặt đoạn mã này vào tập lệnh hoặc chạy từ dòng cmd:

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

Tiếp theo, tạo tập lệnh sau hoặc chạy từ dòng cmd:

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

Bạn đã hoàn thành, chạy chương trình của bạn. Nếu bạn gặp lỗi GUI khi chạy. Sao chép chúng xuống và nếu chúng là tài liệu tham khảo thư viện, hãy tìm các gói cho chúng và cài đặt theo cùng một cách.


2

Chạy cái này để lấy thông tin phiên bản - 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.