diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /third_party/rust/object/examples/objdump.rs | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | third_party/rust/object/examples/objdump.rs | 77 |
1 files changed, 77 insertions, 0 deletions
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: {} <file> ...", 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("<invalid name>") + ); + for relocation in section.relocations() { + println!("{:?}", relocation); + } + } + } + } +} |