Expand description
Symbol versioning
Implementation of the GNU symbol versioning extension according to LSB Core Specification - Symbol Versioning.
Examples
List the dependencies of an ELF file that have version needed information along with the versions needed for each dependency.
use goblin::error::Error;
pub fn show_verneed(bytes: &[u8]) -> Result<(), Error> {
let binary = goblin::elf::Elf::parse(&bytes)?;
if let Some(verneed) = binary.verneed {
for need_file in verneed.iter() {
println!(
"Depend on {:?} with version(s):",
binary.dynstrtab.get_at(need_file.vn_file)
);
for need_ver in need_file.iter() {
println!("{:?}", binary.dynstrtab.get_at(need_ver.vna_name));
}
}
}
Ok(())
}
List the version defined information of an ELF file, effectively listing the version defined by this ELF file.
use goblin::error::Error;
pub fn show_verdef(bytes: &[u8]) -> Result<(), Error> {
let binary = goblin::elf::Elf::parse(&bytes)?;
if let Some(verdef) = &binary.verdef {
for def in verdef.iter() {
for (n, aux) in def.iter().enumerate() {
let name = binary.dynstrtab.get_at(aux.vda_name);
match n {
0 => print!("Name: {:?}", name),
1 => print!(" Parent: {:?}", name),
_ => print!(", {:?}", name),
}
}
print!("\n");
}
}
Ok(())
}
Structs
An ELF Version Definition Auxiliary entry.
An ELF Version Definition entry .
Iterator over the Verdef
entries from the SHT_GNU_VERDEF
section.
Helper struct to iterate over Version Definition and Version Definition Auxiliary entries.
An ELF Version Need Auxiliary entry.
An ELF Version Need entry .
Iterator over the Verneed
entries from the SHT_GNU_VERNEED
section.
Helper struct to iterate over Version Needed and Version Needed Auxiliary entries.
An ELF Symbol Version entry.
Iterator over the Versym
entries from the SHT_GNU_VERSYM
section.
Helper struct to iterate over Symbol Version entries.
Constants
Bitmask to check hidden bit, see Versym::is_hidden
.
Bitmask to get version information, see Versym::version
.
Bitmask to check base
flag in Verdef::vd_flags
.
Bitmask to check info
flag in Verdef::vd_flags
.
Bitmask to check weak
flag in Verdef::vd_flags
.
Constant describing a global symbol, see Versym::is_global
.
Constant describing a local symbol, see Versym::is_local
.