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 theSHT_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 theSHT_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 theSHT_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 inVerdef::vd_flags
. - Bitmask to check
info
flag inVerdef::vd_flags
. - Bitmask to check
weak
flag inVerdef::vd_flags
. - Constant describing a global symbol, see
Versym::is_global
. - Constant describing a local symbol, see
Versym::is_local
.