summaryrefslogtreecommitdiffstats
path: root/third_party/rust/object/examples/objdump.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
commit2aa4a82499d4becd2284cdb482213d541b8804dd (patch)
treeb80bf8bf13c3766139fbacc530efd0dd9d54394c /third_party/rust/object/examples/objdump.rs
parentInitial commit. (diff)
downloadfirefox-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.rs77
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);
+ }
+ }
+ }
+ }
+}