fix: support endianess + old format for parsing ld.so.cache

I also added tests fixtures as can be found in my repo here: https://github.com/EKTehtris/ld_cache_rs
pull/15/head
EKTehtris 3 years ago
parent d8d311738c
commit 23a29e41a5

@ -1,24 +1,23 @@
//! User space probes. //! User space probes.
use libc::pid_t;
use object::{Object, ObjectSymbol};
use std::{ use std::{
error::Error, error::Error,
ffi::CStr,
fs, fs,
io::{self, BufRead, Cursor, Read}, io::{self, BufRead, Cursor, Read},
mem, mem,
os::raw::c_char,
path::{Path, PathBuf}, path::{Path, PathBuf},
sync::Arc, sync::Arc,
}; };
use libc::pid_t;
use object::{Object, ObjectSymbol};
use thiserror::Error; use thiserror::Error;
use crate::{ use crate::{
generated::bpf_prog_type::BPF_PROG_TYPE_KPROBE, generated::bpf_prog_type::BPF_PROG_TYPE_KPROBE,
programs::{ programs::{
LinkRef,
load_program, load_program,
probe::{attach, ProbeKind}, probe::{attach, ProbeKind}, ProgramData, ProgramError,
LinkRef, ProgramData, ProgramError,
}, },
}; };
@ -29,6 +28,7 @@ lazy_static! {
LdSoCache::load(LD_SO_CACHE_FILE).map_err(Arc::new); LdSoCache::load(LD_SO_CACHE_FILE).map_err(Arc::new);
} }
const LD_SO_CACHE_HEADER: &str = "glibc-ld.so.cache1.1"; const LD_SO_CACHE_HEADER: &str = "glibc-ld.so.cache1.1";
const LD_SO_CACHE_HEADER_OLD: &str = "ld.so-1.7.0";
/// An user space probe. /// An user space probe.
/// ///
@ -196,8 +196,8 @@ fn find_lib_in_proc_maps(pid: pid_t, lib: &str) -> Result<Option<String>, io::Er
#[derive(Debug)] #[derive(Debug)]
pub(crate) struct CacheEntry { pub(crate) struct CacheEntry {
key: String, lib_name: String,
value: String, path: String,
flags: i32, flags: i32,
} }
@ -206,66 +206,117 @@ pub(crate) struct LdSoCache {
entries: Vec<CacheEntry>, entries: Vec<CacheEntry>,
} }
#[allow(unused)]
#[derive(Copy, Clone, Debug)]
pub enum TargetEndian {
Native,
Big,
Little,
}
impl LdSoCache { impl LdSoCache {
pub fn load<T: AsRef<Path>>(path: T) -> Result<Self, io::Error> { pub fn load<T: AsRef<Path>>(path: T) -> Result<Self, io::Error> {
let data = fs::read(path)?; let data = fs::read(path)?;
Self::parse(&data) Self::parse(&data, TargetEndian::Native)
} }
fn parse(data: &[u8]) -> Result<Self, io::Error> { fn parse(data: &[u8], endianness: TargetEndian) -> Result<Self, io::Error> {
let mut cursor = Cursor::new(data); let mut cursor = Cursor::new(data);
let read_u32 = |cursor: &mut Cursor<_>| -> Result<u32, io::Error> { let read_u32 = |cursor: &mut Cursor<_>| -> Result<u32, io::Error> {
let mut buf = [0u8; mem::size_of::<u32>()]; let mut buf = [0u8; mem::size_of::<u32>()];
cursor.read_exact(&mut buf)?; cursor.read_exact(&mut buf)?;
Ok(u32::from_ne_bytes(buf)) Ok(match endianness {
TargetEndian::Native => u32::from_ne_bytes(buf),
TargetEndian::Big => u32::from_be_bytes(buf),
TargetEndian::Little => u32::from_le_bytes(buf),
})
}; };
let read_i32 = |cursor: &mut Cursor<_>| -> Result<i32, io::Error> { let read_i32 = |cursor: &mut Cursor<_>| -> Result<i32, io::Error> {
let mut buf = [0u8; mem::size_of::<i32>()]; let mut buf = [0u8; mem::size_of::<i32>()];
cursor.read_exact(&mut buf)?; cursor.read_exact(&mut buf)?;
Ok(match endianness {
Ok(i32::from_ne_bytes(buf)) TargetEndian::Native => i32::from_ne_bytes(buf),
TargetEndian::Big => i32::from_be_bytes(buf),
TargetEndian::Little => i32::from_le_bytes(buf),
})
}; };
let mut buf = [0u8; LD_SO_CACHE_HEADER.len()]; let mut buf = [0u8; LD_SO_CACHE_HEADER.len()];
let mut buf_old = [0u8; LD_SO_CACHE_HEADER_OLD.len()];
cursor.read_exact(&mut buf)?; cursor.read_exact(&mut buf)?;
let header = std::str::from_utf8(&buf).or(Err(io::Error::new( cursor.set_position(0);
cursor.read_exact(&mut buf_old)?;
let header = std::str::from_utf8(&buf).or(
std::str::from_utf8(&buf_old).or(
Err(io::Error::new(
io::ErrorKind::InvalidData, io::ErrorKind::InvalidData,
"invalid ld.so.cache header", "invalid ld.so.cache header",
)))?; ))
)
)?;
let mut is_old: bool = false;
if header != LD_SO_CACHE_HEADER { if header != LD_SO_CACHE_HEADER {
if header != LD_SO_CACHE_HEADER_OLD {
return Err(io::Error::new( return Err(io::Error::new(
io::ErrorKind::InvalidData, io::ErrorKind::InvalidData,
"invalid ld.so.cache header", "invalid ld.so.cache header",
)); ));
} else {
is_old = true;
// add a padding corresponding to LD_SO_CACHE_HEADER_OLD
// size 11 + 1 to align on 12 bytes or 3*4 bounds
cursor.consume(1)
}
} else {
// we have to reset the position since we found the new header
cursor.set_position(LD_SO_CACHE_HEADER.len() as u64);
} }
let num_entries = read_u32(&mut cursor)?; let num_entries: u32 = read_u32(&mut cursor)?;
let mut string_table_offset: usize = 0;
if !is_old {
let _str_tab_len = read_u32(&mut cursor)?; let _str_tab_len = read_u32(&mut cursor)?;
// those are as of glibc 2.33 (flags u8, empty 3xu8, extension_offset u32, unused 3xu32)
cursor.consume(5 * mem::size_of::<u32>()); cursor.consume(5 * mem::size_of::<u32>());
} else {
// only 3 u32 were present in the old entries
string_table_offset = cursor.position() as usize + num_entries as usize * mem::size_of::<u32>() * 3;
}
let mut entries = Vec::new(); let mut entries = Vec::new();
for _ in 0..num_entries { for _ in 0..num_entries {
let flags = read_i32(&mut cursor)?; let flags = read_i32(&mut cursor)?;
let k_pos = read_u32(&mut cursor)? as usize; let k_pos = read_u32(&mut cursor)? as usize;
let v_pos = read_u32(&mut cursor)? as usize; let v_pos = read_u32(&mut cursor)? as usize;
cursor.consume(12); if !is_old {
let key = // those are as of glibc 2.33 (os_version u32, hwcap u64)
unsafe { CStr::from_ptr(cursor.get_ref()[k_pos..].as_ptr() as *const c_char) } cursor.consume(mem::size_of::<u32>() + mem::size_of::<u64>());
.to_string_lossy() }
.into_owned(); let key = Self::str_from_u8_nul_utf8(&cursor.get_ref()[k_pos + string_table_offset..]).map_err(|e| io::Error::new(
let value = io::ErrorKind::InvalidData,
unsafe { CStr::from_ptr(cursor.get_ref()[v_pos..].as_ptr() as *const c_char) } format!("Invalid ut8 string : {}", e),
.to_string_lossy() ))?.to_owned();
.into_owned(); let value = Self::str_from_u8_nul_utf8(&cursor.get_ref()[v_pos + string_table_offset..]).map_err(|e| io::Error::new(
entries.push(CacheEntry { key, value, flags }); io::ErrorKind::InvalidData,
format!("Invalid ut8 string : {}", e),
))?.to_owned();
entries.push(CacheEntry { lib_name: key, path: value, flags });
} }
Ok(LdSoCache { entries }) Ok(LdSoCache { entries })
} }
pub fn str_from_u8_nul_utf8(utf8_src: &[u8]) -> Result<&str, std::str::Utf8Error> {
let nul_range_end = utf8_src
.iter()
.position(|&c| c == b'\0')
.unwrap_or(utf8_src.len()); // default to length if no `\0` present
::std::str::from_utf8(&utf8_src[0..nul_range_end])
}
pub fn resolve(&self, lib: &str) -> Option<&str> { pub fn resolve(&self, lib: &str) -> Option<&str> {
let lib = if !lib.contains(".so") { let lib = if !lib.contains(".so") {
lib.to_string() + ".so" lib.to_string() + ".so"
@ -274,8 +325,8 @@ impl LdSoCache {
}; };
self.entries self.entries
.iter() .iter()
.find(|entry| entry.key.starts_with(&lib)) .find(|entry| entry.lib_name.starts_with(&lib))
.map(|entry| entry.value.as_str()) .map(|entry| entry.path.as_str())
} }
} }
@ -301,3 +352,62 @@ fn resolve_symbol(path: &str, symbol: &str) -> Result<u64, ResolveSymbolError> {
.map(|s| s.address()) .map(|s| s.address())
.ok_or_else(|| ResolveSymbolError::Unknown(symbol.to_string())) .ok_or_else(|| ResolveSymbolError::Unknown(symbol.to_string()))
} }
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_big_endian_old_format_s390x() {
let data = include_bytes!("../../tests/fixtures/ld.so.cache_s390x_old");
let cache = LdSoCache::parse(data, TargetEndian::Big);
assert!(cache.is_ok());
let cache = cache.unwrap();
assert_eq!(cache.entries.len(), 188);
let strings: &str = include_str!("../../tests/fixtures/s390x.strings");
test_entries(strings, cache);
}
#[test]
fn test_little_endian_new_format_mips() {
let data = include_bytes!("../../tests/fixtures/ld.so.cache_mips");
let cache = LdSoCache::parse(data, TargetEndian::Little);
assert!(cache.is_ok());
let cache = cache.unwrap();
assert_eq!(cache.entries.len(), 2407);
let strings: &str = include_str!("../../tests/fixtures/mips.strings");
test_entries(strings, cache);
}
#[test]
fn test_little_endian_new_format_debian_x86_64() {
let data = include_bytes!("../../tests/fixtures/ld.so.cache_debian");
let cache = LdSoCache::parse(data, TargetEndian::Little);
assert!(cache.is_ok());
let cache = cache.unwrap();
assert_eq!(cache.entries.len(), 81);
let strings: &str = include_str!("../../tests/fixtures/debian.strings");
test_entries(strings, cache);
}
#[test]
fn test_little_endian_old_format_debian_x86_64() {
let data = include_bytes!("../../tests/fixtures/ld.so.cache_debian_old");
let cache = LdSoCache::parse(data, TargetEndian::Little);
assert!(cache.is_ok());
let cache = cache.unwrap();
assert_eq!(cache.entries.len(), 148);
let strings: &str = include_str!("../../tests/fixtures/debian_old.strings");
test_entries(strings, cache);
}
fn test_entries(strings: &str, cache: LdSoCache) {
for string in strings.split_terminator("\n") {
let (lib_name, path) = string.split_once(" ").unwrap();
assert!(cache.entries.iter().any(|x| x.lib_name == lib_name), "lib name : {} was not inside the entries", lib_name);
let found_paths: Vec<&CacheEntry> = cache.entries.iter().filter(|e| e.lib_name == lib_name).collect();
assert!(!found_paths.is_empty(), "Path was not found for lib name : {}", lib_name);
assert!(found_paths.iter().any(|e| e.path == path), "lib path : {} was not correct, got {:?}", path, found_paths);
}
}
}

@ -0,0 +1,81 @@
libzstd.so.1 /lib/x86_64-linux-gnu/libzstd.so.1
libz.so.1 /lib/x86_64-linux-gnu/libz.so.1
libuuid.so.1 /lib/x86_64-linux-gnu/libuuid.so.1
libutil.so.1 /lib/x86_64-linux-gnu/libutil.so.1
libunistring.so.2 /lib/x86_64-linux-gnu/libunistring.so.2
libudev.so.1 /lib/x86_64-linux-gnu/libudev.so.1
libtinfo.so.6 /lib/x86_64-linux-gnu/libtinfo.so.6
libtic.so.6 /lib/x86_64-linux-gnu/libtic.so.6
libthread_db.so.1 /lib/x86_64-linux-gnu/libthread_db.so.1
libtasn1.so.6 /lib/x86_64-linux-gnu/libtasn1.so.6
libsystemd.so.0 /lib/x86_64-linux-gnu/libsystemd.so.0
libstdc++.so.6 /lib/x86_64-linux-gnu/libstdc++.so.6
libss.so.2 /lib/x86_64-linux-gnu/libss.so.2
libsmartcols.so.1 /lib/x86_64-linux-gnu/libsmartcols.so.1
libsepol.so.1 /lib/x86_64-linux-gnu/libsepol.so.1
libsemanage.so.1 /lib/x86_64-linux-gnu/libsemanage.so.1
libselinux.so.1 /lib/x86_64-linux-gnu/libselinux.so.1
libseccomp.so.2 /lib/x86_64-linux-gnu/libseccomp.so.2
librt.so.1 /lib/x86_64-linux-gnu/librt.so.1
libresolv.so.2 /lib/x86_64-linux-gnu/libresolv.so.2
libp11-kit.so.0 /lib/x86_64-linux-gnu/libp11-kit.so.0
libpthread.so.0 /lib/x86_64-linux-gnu/libpthread.so.0
libprocps.so.8 /lib/x86_64-linux-gnu/libprocps.so.8
libpcre2-8.so.0 /lib/x86_64-linux-gnu/libpcre2-8.so.0
libpcreposix.so.3 /lib/x86_64-linux-gnu/libpcreposix.so.3
libpcre.so.3 /lib/x86_64-linux-gnu/libpcre.so.3
libpcprofile.so /lib/x86_64-linux-gnu/libpcprofile.so
libpanelw.so.6 /lib/x86_64-linux-gnu/libpanelw.so.6
libpanel.so.6 /lib/x86_64-linux-gnu/libpanel.so.6
libpamc.so.0 /lib/x86_64-linux-gnu/libpamc.so.0
libpam_misc.so.0 /lib/x86_64-linux-gnu/libpam_misc.so.0
libpam.so.0 /lib/x86_64-linux-gnu/libpam.so.0
libnss_nisplus.so.2 /lib/x86_64-linux-gnu/libnss_nisplus.so.2
libnss_nis.so.2 /lib/x86_64-linux-gnu/libnss_nis.so.2
libnss_hesiod.so.2 /lib/x86_64-linux-gnu/libnss_hesiod.so.2
libnss_files.so.2 /lib/x86_64-linux-gnu/libnss_files.so.2
libnss_dns.so.2 /lib/x86_64-linux-gnu/libnss_dns.so.2
libnss_compat.so.2 /lib/x86_64-linux-gnu/libnss_compat.so.2
libnsl.so.1 /lib/x86_64-linux-gnu/libnsl.so.1
libnettle.so.7 /lib/x86_64-linux-gnu/libnettle.so.7
libncursesw.so.6 /lib/x86_64-linux-gnu/libncursesw.so.6
libncurses.so.6 /lib/x86_64-linux-gnu/libncurses.so.6
libmvec.so.1 /lib/x86_64-linux-gnu/libmvec.so.1
libmount.so.1 /lib/x86_64-linux-gnu/libmount.so.1
libmenuw.so.6 /lib/x86_64-linux-gnu/libmenuw.so.6
libmenu.so.6 /lib/x86_64-linux-gnu/libmenu.so.6
libmemusage.so /lib/x86_64-linux-gnu/libmemusage.so
libm.so.6 /lib/x86_64-linux-gnu/libm.so.6
liblz4.so.1 /lib/x86_64-linux-gnu/liblz4.so.1
liblzma.so.5 /lib/x86_64-linux-gnu/liblzma.so.5
libidn2.so.0 /lib/x86_64-linux-gnu/libidn2.so.0
libhogweed.so.5 /lib/x86_64-linux-gnu/libhogweed.so.5
libgpg-error.so.0 /lib/x86_64-linux-gnu/libgpg-error.so.0
libgnutls.so.30 /lib/x86_64-linux-gnu/libgnutls.so.30
libgmp.so.10 /lib/x86_64-linux-gnu/libgmp.so.10
libgcrypt.so.20 /lib/x86_64-linux-gnu/libgcrypt.so.20
libgcc_s.so.1 /lib/x86_64-linux-gnu/libgcc_s.so.1
libformw.so.6 /lib/x86_64-linux-gnu/libformw.so.6
libform.so.6 /lib/x86_64-linux-gnu/libform.so.6
libffi.so.7 /lib/x86_64-linux-gnu/libffi.so.7
libfdisk.so.1 /lib/x86_64-linux-gnu/libfdisk.so.1
libe2p.so.2 /lib/x86_64-linux-gnu/libe2p.so.2
libext2fs.so.2 /lib/x86_64-linux-gnu/libext2fs.so.2
libdl.so.2 /lib/x86_64-linux-gnu/libdl.so.2
libdebconfclient.so.0 /lib/x86_64-linux-gnu/libdebconfclient.so.0
libdb-5.3.so /lib/x86_64-linux-gnu/libdb-5.3.so
libcrypt.so.1 /lib/x86_64-linux-gnu/libcrypt.so.1
libcom_err.so.2 /lib/x86_64-linux-gnu/libcom_err.so.2
libcap-ng.so.0 /lib/x86_64-linux-gnu/libcap-ng.so.0
libc.so.6 /lib/x86_64-linux-gnu/libc.so.6
libbz2.so.1.0 /lib/x86_64-linux-gnu/libbz2.so.1.0
libblkid.so.1 /lib/x86_64-linux-gnu/libblkid.so.1
libaudit.so.1 /lib/x86_64-linux-gnu/libaudit.so.1
libattr.so.1 /lib/x86_64-linux-gnu/libattr.so.1
libapt-private.so.0.0 /lib/x86_64-linux-gnu/libapt-private.so.0.0
libapt-pkg.so.6.0 /lib/x86_64-linux-gnu/libapt-pkg.so.6.0
libanl.so.1 /lib/x86_64-linux-gnu/libanl.so.1
libacl.so.1 /lib/x86_64-linux-gnu/libacl.so.1
libSegFault.so /lib/x86_64-linux-gnu/libSegFault.so
libBrokenLocale.so.1 /lib/x86_64-linux-gnu/libBrokenLocale.so.1
ld-linux-x86-64.so.2 /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2

@ -0,0 +1,148 @@
libz.so.1 /lib64/libz.so.1
libxml2.so.2 /usr/lib64/libxml2.so.2
libverto.so.0 /usr/lib64/libverto.so.0
libverto.so /usr/lib64/libverto.so
libverto-k5ev.so.0 /usr/lib64/libverto-k5ev.so.0
libverto-k5ev.so /usr/lib64/libverto-k5ev.so
libuuid.so.1 /lib64/libuuid.so.1
libutil.so.1 /lib64/libutil.so.1
libutempter.so.0 /usr/lib64/libutempter.so.0
libustr-1.0.so.1 /usr/lib64/libustr-1.0.so.1
libuser.so.1 /usr/lib64/libuser.so.1
libusbpp-0.1.so.4 /usr/lib64/libusbpp-0.1.so.4
libusb-0.1.so.4 /usr/lib64/libusb-0.1.so.4
libtinfo.so.5 /lib64/libtinfo.so.5
libtic.so.5 /usr/lib64/libtic.so.5
libthread_db.so.1 /lib64/libthread_db.so.1
libtasn1.so.3 /usr/lib64/libtasn1.so.3
libstdc++.so.6 /usr/lib64/libstdc++.so.6
libssl3.so /usr/lib64/libssl3.so
libssl.so.10 /usr/lib64/libssl.so.10
libssh2.so.1 /usr/lib64/libssh2.so.1
libsqlite3.so.0 /usr/lib64/libsqlite3.so.0
libsoftokn3.so /usr/lib64/libsoftokn3.so
libsmime3.so /usr/lib64/libsmime3.so
libsepol.so.1 /lib64/libsepol.so.1
libsemanage.so.1 /lib64/libsemanage.so.1
libselinux.so.1 /lib64/libselinux.so.1
libsasl2.so.2 /usr/lib64/libsasl2.so.2
librt.so.1 /lib64/librt.so.1
librpmio.so.1 /usr/lib64/librpmio.so.1
librpmbuild.so.1 /usr/lib64/librpmbuild.so.1
librpm.so.1 /usr/lib64/librpm.so.1
libresolv.so.2 /lib64/libresolv.so.2
libreadline.so.6 /lib64/libreadline.so.6
libp11-kit.so.0 /usr/lib64/libp11-kit.so.0
libpython2.6.so.1.0 /usr/lib64/libpython2.6.so.1.0
libpthread.so.0 /lib64/libpthread.so.0
libpth.so.20 /usr/lib64/libpth.so.20
libproc-3.2.8.so /lib64/libproc-3.2.8.so
libpopt.so.0 /lib64/libpopt.so.0
libply.so.2 /lib64/libply.so.2
libply-splash-core.so.2 /lib64/libply-splash-core.so.2
libply-boot-client.so.2 /usr/lib64/libply-boot-client.so.2
libplds4.so /lib64/libplds4.so
libplc4.so /lib64/libplc4.so
libpcreposix.so.0 /usr/lib64/libpcreposix.so.0
libpcrecpp.so.0 /usr/lib64/libpcrecpp.so.0
libpcre.so.0 /lib64/libpcre.so.0
libpcprofile.so /usr/lib64/libpcprofile.so
libpanelw.so.5 /usr/lib64/libpanelw.so.5
libpanel.so.5 /usr/lib64/libpanel.so.5
libpamc.so.0 /lib64/libpamc.so.0
libpam_misc.so.0 /lib64/libpam_misc.so.0
libpam.so.0 /lib64/libpam.so.0
libopcodes-2.20.51.0.2-5.48.el6.so /usr/lib64/libopcodes-2.20.51.0.2-5.48.el6.so
libnss3.so /usr/lib64/libnss3.so
libnssutil3.so /usr/lib64/libnssutil3.so
libnsssysinit.so /usr/lib64/libnsssysinit.so
libnsspem.so /usr/lib64/libnsspem.so
libnssdbm3.so /usr/lib64/libnssdbm3.so
libnssckbi.so /usr/lib64/libnssckbi.so
libnss_nisplus.so.2 /lib64/libnss_nisplus.so.2
libnss_nis.so.2 /lib64/libnss_nis.so.2
libnss_hesiod.so.2 /lib64/libnss_hesiod.so.2
libnss_files.so.2 /lib64/libnss_files.so.2
libnss_dns.so.2 /lib64/libnss_dns.so.2
libnss_compat.so.2 /lib64/libnss_compat.so.2
libnspr4.so /lib64/libnspr4.so
libnsl.so.1 /lib64/libnsl.so.1
libnih.so.1 /lib64/libnih.so.1
libnih-dbus.so.1 /lib64/libnih-dbus.so.1
libncursesw.so.5 /lib64/libncursesw.so.5
libncurses.so.5 /lib64/libncurses.so.5
libmp.so.3 /usr/lib64/libmp.so.3
libmenuw.so.5 /usr/lib64/libmenuw.so.5
libmenu.so.5 /usr/lib64/libmenu.so.5
libmemusage.so /usr/lib64/libmemusage.so
libmagic.so.1 /usr/lib64/libmagic.so.1
libm.so.6 /lib64/libm.so.6
liblzma.so.0 /usr/lib64/liblzma.so.0
liblwres.so.80 /usr/lib64/liblwres.so.80
liblua-5.1.so /usr/lib64/liblua-5.1.so
libldif-2.4.so.2 /lib64/libldif-2.4.so.2
libldap_r-2.4.so.2 /lib64/libldap_r-2.4.so.2
libldap-2.4.so.2 /lib64/libldap-2.4.so.2
liblber-2.4.so.2 /lib64/liblber-2.4.so.2
libk5crypto.so.3 /lib64/libk5crypto.so.3
libkrb5support.so.0 /lib64/libkrb5support.so.0
libkrb5.so.3 /lib64/libkrb5.so.3
libkeyutils.so.1 /lib64/libkeyutils.so.1
libkdb5.so.6 /usr/lib64/libkdb5.so.6
libisccfg.so.82 /usr/lib64/libisccfg.so.82
libisccc.so.80 /usr/lib64/libisccc.so.80
libisc.so.83 /usr/lib64/libisc.so.83
libidn.so.11 /lib64/libidn.so.11
libhistory.so.6 /usr/lib64/libhistory.so.6
libgthread-2.0.so.0 /lib64/libgthread-2.0.so.0
libgssrpc.so.4 /lib64/libgssrpc.so.4
libgssapi_krb5.so.2 /lib64/libgssapi_krb5.so.2
libgpgme.so.11 /usr/lib64/libgpgme.so.11
libgpgme-pthread.so.11 /usr/lib64/libgpgme-pthread.so.11
libgpgme-pth.so.11 /usr/lib64/libgpgme-pth.so.11
libgpg-error.so.0 /lib64/libgpg-error.so.0
libgobject-2.0.so.0 /lib64/libgobject-2.0.so.0
libgmpxx.so.4 /usr/lib64/libgmpxx.so.4
libgmp.so.3 /usr/lib64/libgmp.so.3
libgmodule-2.0.so.0 /lib64/libgmodule-2.0.so.0
libglib-2.0.so.0 /lib64/libglib-2.0.so.0
libgio-2.0.so.0 /lib64/libgio-2.0.so.0
libgdbm.so.2 /usr/lib64/libgdbm.so.2
libgcrypt.so.11 /lib64/libgcrypt.so.11
libgcc_s.so.1 /lib64/libgcc_s.so.1
libgamin-1.so.0 /usr/lib64/libgamin-1.so.0
libfreebl3.so /lib64/libfreebl3.so
libfreebl3.so /usr/lib64/libfreebl3.so
libfreeblpriv3.so /lib64/libfreeblpriv3.so
libfreeblpriv3.so /usr/lib64/libfreeblpriv3.so
libformw.so.5 /usr/lib64/libformw.so.5
libform.so.5 /usr/lib64/libform.so.5
libffi.so.5 /usr/lib64/libffi.so.5
libfam.so.0 /usr/lib64/libfam.so.0
libexpat.so.1 /lib64/libexpat.so.1
libelf.so.1 /usr/lib64/libelf.so.1
libdns.so.81 /usr/lib64/libdns.so.81
libdl.so.2 /lib64/libdl.so.2
libdbus-1.so.3 /lib64/libdbus-1.so.3
libdb-4.7.so /lib64/libdb-4.7.so
libdb-4.7.so /usr/lib64/libdb-4.7.so
libcurl.so.4 /usr/lib64/libcurl.so.4
libcrypto.so.10 /usr/lib64/libcrypto.so.10
libcrypt.so.1 /lib64/libcrypt.so.1
libcrack.so.2 /usr/lib64/libcrack.so.2
libcom_err.so.2 /lib64/libcom_err.so.2
libcidn.so.1 /lib64/libcidn.so.1
libcap.so.2 /lib64/libcap.so.2
libc.so.6 /lib64/libc.so.6
libbz2.so.1 /lib64/libbz2.so.1
libblkid.so.1 /lib64/libblkid.so.1
libbind9.so.80 /usr/lib64/libbind9.so.80
libbfd-2.20.51.0.2-5.48.el6.so /usr/lib64/libbfd-2.20.51.0.2-5.48.el6.so
libauparse.so.0 /lib64/libauparse.so.0
libaudit.so.1 /lib64/libaudit.so.1
libattr.so.1 /lib64/libattr.so.1
libanl.so.1 /lib64/libanl.so.1
libacl.so.1 /lib64/libacl.so.1
libSegFault.so /lib64/libSegFault.so
libBrokenLocale.so.1 /lib64/libBrokenLocale.so.1
ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

@ -0,0 +1,188 @@
libzstd.so.1 /usr/lib/s390x-linux-gnu/libzstd.so.1
libz.so.1 /lib/s390x-linux-gnu/libz.so.1
libyaml-0.so.2 /usr/lib/s390x-linux-gnu/libyaml-0.so.2
libxtables.so.12 /usr/lib/s390x-linux-gnu/libxtables.so.12
libxml2.so.2 /usr/lib/s390x-linux-gnu/libxml2.so.2
libxcb.so.1 /usr/lib/s390x-linux-gnu/libxcb.so.1
libwrap.so.0 /lib/s390x-linux-gnu/libwrap.so.0
libuuid.so.1 /lib/s390x-linux-gnu/libuuid.so.1
libutil.so.1 /lib/s390x-linux-gnu/libutil.so.1
libusb-1.0.so.0 /lib/s390x-linux-gnu/libusb-1.0.so.0
libunistring.so.2 /usr/lib/s390x-linux-gnu/libunistring.so.2
libulockmgr.so.1 /lib/s390x-linux-gnu/libulockmgr.so.1
libudev.so.1 /lib/s390x-linux-gnu/libudev.so.1
libtinfo.so.5 /lib/s390x-linux-gnu/libtinfo.so.5
libtic.so.5 /usr/lib/s390x-linux-gnu/libtic.so.5
libthread_db.so.1 /lib/s390x-linux-gnu/libthread_db.so.1
libtasn1.so.6 /usr/lib/s390x-linux-gnu/libtasn1.so.6
libsystemd.so.0 /lib/s390x-linux-gnu/libsystemd.so.0
libstdc++.so.6 /usr/lib/s390x-linux-gnu/libstdc++.so.6
libssl.so.1.1 /usr/lib/s390x-linux-gnu/libssl.so.1.1
libssl.so.1.0.0 /usr/lib/s390x-linux-gnu/libssl.so.1.0.0
libss.so.2 /lib/s390x-linux-gnu/libss.so.2
libsqlite3.so.0 /usr/lib/s390x-linux-gnu/libsqlite3.so.0
libsmartcols.so.1 /lib/s390x-linux-gnu/libsmartcols.so.1
libslang.so.2 /lib/s390x-linux-gnu/libslang.so.2
libsigsegv.so.2 /usr/lib/s390x-linux-gnu/libsigsegv.so.2
libsgutils2.so.2 /usr/lib/s390x-linux-gnu/libsgutils2.so.2
libsepol.so.1 /lib/s390x-linux-gnu/libsepol.so.1
libsemanage.so.1 /usr/lib/s390x-linux-gnu/libsemanage.so.1
libselinux.so.1 /lib/s390x-linux-gnu/libselinux.so.1
libseccomp.so.2 /lib/s390x-linux-gnu/libseccomp.so.2
librt.so.1 /lib/s390x-linux-gnu/librt.so.1
libresolv.so.2 /lib/s390x-linux-gnu/libresolv.so.2
libreadline.so.7 /lib/s390x-linux-gnu/libreadline.so.7
libp11-kit.so.0 /usr/lib/s390x-linux-gnu/libp11-kit.so.0
libpthread.so.0 /lib/s390x-linux-gnu/libpthread.so.0
libpsl.so.5 /usr/lib/s390x-linux-gnu/libpsl.so.5
libprocps.so.6 /lib/s390x-linux-gnu/libprocps.so.6
libpopt.so.0 /usr/lib/s390x-linux-gnu/libpopt.so.0
libpolkit-gobject-1.so.0 /usr/lib/s390x-linux-gnu/libpolkit-gobject-1.so.0
libpng16.so.16 /usr/lib/s390x-linux-gnu/libpng16.so.16
libply.so.4 /lib/s390x-linux-gnu/libply.so.4
libply-splash-graphics.so.4 /lib/s390x-linux-gnu/libply-splash-graphics.so.4
libply-splash-core.so.4 /lib/s390x-linux-gnu/libply-splash-core.so.4
libply-boot-client.so.4 /lib/s390x-linux-gnu/libply-boot-client.so.4
libpipeline.so.1 /usr/lib/s390x-linux-gnu/libpipeline.so.1
libpfm.so.4 /usr/lib/s390x-linux-gnu/libpfm.so.4
libperl.so.5.26 /usr/lib/s390x-linux-gnu/libperl.so.5.26
libpcreposix.so.3 /usr/lib/s390x-linux-gnu/libpcreposix.so.3
libpcre.so.3 /lib/s390x-linux-gnu/libpcre.so.3
libpcprofile.so /lib/s390x-linux-gnu/libpcprofile.so
libpci.so.3 /lib/s390x-linux-gnu/libpci.so.3
libpcap.so.0.8 /usr/lib/s390x-linux-gnu/libpcap.so.0.8
libparted.so.2 /lib/s390x-linux-gnu/libparted.so.2
libpanelw.so.5 /usr/lib/s390x-linux-gnu/libpanelw.so.5
libpanel.so.5 /usr/lib/s390x-linux-gnu/libpanel.so.5
libpamc.so.0 /lib/s390x-linux-gnu/libpamc.so.0
libpam_misc.so.0 /lib/s390x-linux-gnu/libpam_misc.so.0
libpam.so.0 /lib/s390x-linux-gnu/libpam.so.0
libopcodes-2.30-system.so /usr/lib/s390x-linux-gnu/libopcodes-2.30-system.so
libnuma.so.1 /usr/lib/s390x-linux-gnu/libnuma.so.1
libntfs-3g.so.88 /lib/s390x-linux-gnu/libntfs-3g.so.88
libnss_systemd.so.2 /lib/s390x-linux-gnu/libnss_systemd.so.2
libnss_nisplus.so.2 /lib/s390x-linux-gnu/libnss_nisplus.so.2
libnss_nis.so.2 /lib/s390x-linux-gnu/libnss_nis.so.2
libnss_hesiod.so.2 /lib/s390x-linux-gnu/libnss_hesiod.so.2
libnss_files.so.2 /lib/s390x-linux-gnu/libnss_files.so.2
libnss_dns.so.2 /lib/s390x-linux-gnu/libnss_dns.so.2
libnss_compat.so.2 /lib/s390x-linux-gnu/libnss_compat.so.2
libnsl.so.1 /lib/s390x-linux-gnu/libnsl.so.1
libnl-3.so.200 /lib/s390x-linux-gnu/libnl-3.so.200
libnl-genl-3.so.200 /lib/s390x-linux-gnu/libnl-genl-3.so.200
libnih.so.1 /lib/s390x-linux-gnu/libnih.so.1
libnfnetlink.so.0 /usr/lib/s390x-linux-gnu/libnfnetlink.so.0
libnewt.so.0.52 /lib/s390x-linux-gnu/libnewt.so.0.52
libnettle.so.6 /usr/lib/s390x-linux-gnu/libnettle.so.6
libnetplan.so.0.0 /usr/lib/s390x-linux-gnu/libnetplan.so.0.0
libnetfilter_conntrack.so.3 /usr/lib/s390x-linux-gnu/libnetfilter_conntrack.so.3
libncursesw.so.5 /lib/s390x-linux-gnu/libncursesw.so.5
libncurses.so.5 /lib/s390x-linux-gnu/libncurses.so.5
libmpfr.so.6 /usr/lib/s390x-linux-gnu/libmpfr.so.6
libmpdec.so.2 /usr/lib/s390x-linux-gnu/libmpdec.so.2
libmount.so.1 /lib/s390x-linux-gnu/libmount.so.1
libmnl.so.0 /lib/s390x-linux-gnu/libmnl.so.0
libmenuw.so.5 /usr/lib/s390x-linux-gnu/libmenuw.so.5
libmenu.so.5 /usr/lib/s390x-linux-gnu/libmenu.so.5
libmemusage.so /lib/s390x-linux-gnu/libmemusage.so
libmagic.so.1 /usr/lib/s390x-linux-gnu/libmagic.so.1
libm.so.6 /lib/s390x-linux-gnu/libm.so.6
liblz4.so.1 /usr/lib/s390x-linux-gnu/liblz4.so.1
liblzma.so.5 /lib/s390x-linux-gnu/liblzma.so.5
liblwres.so.160 /usr/lib/s390x-linux-gnu/liblwres.so.160
libk5crypto.so.3 /usr/lib/s390x-linux-gnu/libk5crypto.so.3
libkrb5support.so.0 /usr/lib/s390x-linux-gnu/libkrb5support.so.0
libkrb5.so.3 /usr/lib/s390x-linux-gnu/libkrb5.so.3
libkmod.so.2 /lib/s390x-linux-gnu/libkmod.so.2
libkeyutils.so.1 /lib/s390x-linux-gnu/libkeyutils.so.1
libjson-c.so.3 /lib/s390x-linux-gnu/libjson-c.so.3
libisccfg.so.160 /usr/lib/s390x-linux-gnu/libisccfg.so.160
libisccc.so.160 /usr/lib/s390x-linux-gnu/libisccc.so.160
libisc.so.169 /usr/lib/s390x-linux-gnu/libisc.so.169
libisc-pkcs11.so.169 /usr/lib/s390x-linux-gnu/libisc-pkcs11.so.169
libisc-export.so.169 /lib/s390x-linux-gnu/libisc-export.so.169
libirs.so.160 /usr/lib/s390x-linux-gnu/libirs.so.160
libip6tc.so.0 /usr/lib/s390x-linux-gnu/libip6tc.so.0
libip4tc.so.0 /usr/lib/s390x-linux-gnu/libip4tc.so.0
libiptc.so.0 /usr/lib/s390x-linux-gnu/libiptc.so.0
libidn2.so.0 /usr/lib/s390x-linux-gnu/libidn2.so.0
libidn.so.11 /lib/s390x-linux-gnu/libidn.so.11
libicuuc.so.60 /usr/lib/s390x-linux-gnu/libicuuc.so.60
libicutu.so.60 /usr/lib/s390x-linux-gnu/libicutu.so.60
libicutest.so.60 /usr/lib/s390x-linux-gnu/libicutest.so.60
libicui18n.so.60 /usr/lib/s390x-linux-gnu/libicui18n.so.60
libicuio.so.60 /usr/lib/s390x-linux-gnu/libicuio.so.60
libicudata.so.60 /usr/lib/s390x-linux-gnu/libicudata.so.60
libhogweed.so.4 /usr/lib/s390x-linux-gnu/libhogweed.so.4
libhistory.so.7 /lib/s390x-linux-gnu/libhistory.so.7
libgthread-2.0.so.0 /usr/lib/s390x-linux-gnu/libgthread-2.0.so.0
libgssapi_krb5.so.2 /usr/lib/s390x-linux-gnu/libgssapi_krb5.so.2
libgpg-error.so.0 /lib/s390x-linux-gnu/libgpg-error.so.0
libgobject-2.0.so.0 /usr/lib/s390x-linux-gnu/libgobject-2.0.so.0
libgnutls.so.30 /usr/lib/s390x-linux-gnu/libgnutls.so.30
libgmp.so.10 /usr/lib/s390x-linux-gnu/libgmp.so.10
libgmodule-2.0.so.0 /usr/lib/s390x-linux-gnu/libgmodule-2.0.so.0
libglib-2.0.so.0 /usr/lib/s390x-linux-gnu/libglib-2.0.so.0
libgirepository-1.0.so.1 /usr/lib/s390x-linux-gnu/libgirepository-1.0.so.1
libgio-2.0.so.0 /usr/lib/s390x-linux-gnu/libgio-2.0.so.0
libgdbm_compat.so.4 /usr/lib/s390x-linux-gnu/libgdbm_compat.so.4
libgdbm.so.5 /usr/lib/s390x-linux-gnu/libgdbm.so.5
libgcrypt.so.20 /lib/s390x-linux-gnu/libgcrypt.so.20
libgcc_s.so.1 /lib/s390x-linux-gnu/libgcc_s.so.1
libfuse.so.2 /lib/s390x-linux-gnu/libfuse.so.2
libfribidi.so.0 /usr/lib/s390x-linux-gnu/libfribidi.so.0
libformw.so.5 /usr/lib/s390x-linux-gnu/libformw.so.5
libform.so.5 /usr/lib/s390x-linux-gnu/libform.so.5
libffi.so.6 /usr/lib/s390x-linux-gnu/libffi.so.6
libfdisk.so.1 /lib/s390x-linux-gnu/libfdisk.so.1
libfastjson.so.4 /usr/lib/s390x-linux-gnu/libfastjson.so.4
libe2p.so.2 /lib/s390x-linux-gnu/libe2p.so.2
libext2fs.so.2 /lib/s390x-linux-gnu/libext2fs.so.2
libexpatw.so.1 /usr/lib/s390x-linux-gnu/libexpatw.so.1
libexpat.so.1 /lib/s390x-linux-gnu/libexpat.so.1
libestr.so.0 /usr/lib/s390x-linux-gnu/libestr.so.0
libelf.so.1 /usr/lib/s390x-linux-gnu/libelf.so.1
libedit.so.2 /usr/lib/s390x-linux-gnu/libedit.so.2
libdrm.so.2 /usr/lib/s390x-linux-gnu/libdrm.so.2
libdns.so.1100 /usr/lib/s390x-linux-gnu/libdns.so.1100
libdns-pkcs11.so.1100 /usr/lib/s390x-linux-gnu/libdns-pkcs11.so.1100
libdns-export.so.1100 /lib/s390x-linux-gnu/libdns-export.so.1100
libdl.so.2 /lib/s390x-linux-gnu/libdl.so.2
libdevmapper.so.1.02.1 /lib/s390x-linux-gnu/libdevmapper.so.1.02.1
libdebconfclient.so.0 /usr/lib/s390x-linux-gnu/libdebconfclient.so.0
libdbus-1.so.3 /lib/s390x-linux-gnu/libdbus-1.so.3
libdb-5.3.so /usr/lib/s390x-linux-gnu/libdb-5.3.so
libcryptsetup.so.12 /lib/s390x-linux-gnu/libcryptsetup.so.12
libcrypto.so.1.1 /usr/lib/s390x-linux-gnu/libcrypto.so.1.1
libcrypto.so.1.0.0 /usr/lib/s390x-linux-gnu/libcrypto.so.1.0.0
libcrypt.so.1 /lib/s390x-linux-gnu/libcrypt.so.1
libcom_err.so.2 /lib/s390x-linux-gnu/libcom_err.so.2
libcidn.so.1 /lib/s390x-linux-gnu/libcidn.so.1
libcap.so.2 /lib/s390x-linux-gnu/libcap.so.2
libcap-ng.so.0 /lib/s390x-linux-gnu/libcap-ng.so.0
libc.so.6 /lib/s390x-linux-gnu/libc.so.6
libbz2.so.1.0 /lib/s390x-linux-gnu/libbz2.so.1.0
libbsd.so.0 /lib/s390x-linux-gnu/libbsd.so.0
libblkid.so.1 /lib/s390x-linux-gnu/libblkid.so.1
libbind9.so.160 /usr/lib/s390x-linux-gnu/libbind9.so.160
libbfd-2.30-system.so /usr/lib/s390x-linux-gnu/libbfd-2.30-system.so
libaudit.so.1 /lib/s390x-linux-gnu/libaudit.so.1
libattr.so.1 /lib/s390x-linux-gnu/libattr.so.1
libatm.so.1 /lib/s390x-linux-gnu/libatm.so.1
libargon2.so.0 /usr/lib/s390x-linux-gnu/libargon2.so.0
libapt-private.so.0.0 /usr/lib/s390x-linux-gnu/libapt-private.so.0.0
libapt-pkg.so.5.0 /usr/lib/s390x-linux-gnu/libapt-pkg.so.5.0
libapt-inst.so.2.0 /usr/lib/s390x-linux-gnu/libapt-inst.so.2.0
libapparmor.so.1 /lib/s390x-linux-gnu/libapparmor.so.1
libanl.so.1 /lib/s390x-linux-gnu/libanl.so.1
libacl.so.1 /lib/s390x-linux-gnu/libacl.so.1
libaccountsservice.so.0 /usr/lib/s390x-linux-gnu/libaccountsservice.so.0
libX11.so.6 /usr/lib/s390x-linux-gnu/libX11.so.6
libXmuu.so.1 /usr/lib/s390x-linux-gnu/libXmuu.so.1
libXext.so.6 /usr/lib/s390x-linux-gnu/libXext.so.6
libXdmcp.so.6 /usr/lib/s390x-linux-gnu/libXdmcp.so.6
libXau.so.6 /usr/lib/s390x-linux-gnu/libXau.so.6
libSegFault.so /lib/s390x-linux-gnu/libSegFault.so
libGeoIP.so.1 /usr/lib/s390x-linux-gnu/libGeoIP.so.1
libBrokenLocale.so.1 /lib/s390x-linux-gnu/libBrokenLocale.so.1
ld64.so.1 /lib/s390x-linux-gnu/ld64.so.1
Loading…
Cancel
Save