From 2aa4a82499d4becd2284cdb482213d541b8804dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 28 Apr 2024 16:29:10 +0200 Subject: Adding upstream version 86.0.1. Signed-off-by: Daniel Baumann --- third_party/rust/object/examples/objdump.rs | 77 +++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 third_party/rust/object/examples/objdump.rs (limited to 'third_party/rust/object/examples/objdump.rs') diff --git a/third_party/rust/object/examples/objdump.rs b/third_party/rust/object/examples/objdump.rs new file mode 100644 index 0000000000..52b227d9de --- /dev/null +++ b/third_party/rust/object/examples/objdump.rs @@ -0,0 +1,77 @@ +use object::{Object, ObjectSection}; +use std::{env, fs, process}; + +fn main() { + let arg_len = env::args().len(); + if arg_len <= 1 { + eprintln!("Usage: {} ...", env::args().next().unwrap()); + process::exit(1); + } + + for file_path in env::args().skip(1) { + if arg_len > 2 { + println!(); + println!("{}:", file_path); + } + + let file = match fs::File::open(&file_path) { + Ok(file) => file, + Err(err) => { + println!("Failed to open file '{}': {}", file_path, err,); + return; + } + }; + let file = match unsafe { memmap::Mmap::map(&file) } { + Ok(mmap) => mmap, + Err(err) => { + println!("Failed to map file '{}': {}", file_path, err,); + return; + } + }; + let file = match object::File::parse(&*file) { + Ok(file) => file, + Err(err) => { + println!("Failed to parse file '{}': {}", file_path, err); + return; + } + }; + + if let Some(uuid) = file.mach_uuid() { + println!("Mach UUID: {}", uuid); + } + if let Some(build_id) = file.build_id() { + println!("Build ID: {:x?}", build_id); + } + if let Some((filename, crc)) = file.gnu_debuglink() { + println!( + "GNU debug link: {} CRC: {:08x}", + String::from_utf8_lossy(filename), + crc + ); + } + + for segment in file.segments() { + println!("{:?}", segment); + } + + for (index, section) in file.sections().enumerate() { + println!("{}: {:?}", index, section); + } + + for (index, symbol) in file.symbols() { + println!("{}: {:?}", index.0, symbol); + } + + for section in file.sections() { + if section.relocations().next().is_some() { + println!( + "\n{} relocations", + section.name().unwrap_or("") + ); + for relocation in section.relocations() { + println!("{:?}", relocation); + } + } + } + } +} -- cgit v1.2.3