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

Iterator over the Verdaux entries for an specific Verdef 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.

Iterator over the Vernaux entries for an specific Verneed 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.