Module goblin::elf::symver

source ·
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§

Constants§