summaryrefslogtreecommitdiffstats
path: root/third_party/rust/goblin/examples/ar.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/goblin/examples/ar.rs
parentInitial commit. (diff)
downloadfirefox-2aa4a82499d4becd2284cdb482213d541b8804dd.tar.xz
firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.zip
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/goblin/examples/ar.rs')
-rw-r--r--third_party/rust/goblin/examples/ar.rs45
1 files changed, 45 insertions, 0 deletions
diff --git a/third_party/rust/goblin/examples/ar.rs b/third_party/rust/goblin/examples/ar.rs
new file mode 100644
index 0000000000..9346e3e045
--- /dev/null
+++ b/third_party/rust/goblin/examples/ar.rs
@@ -0,0 +1,45 @@
+//cargo run --example=ar -- crt1.a
+
+use goblin::elf;
+use goblin::archive;
+use std::env;
+use std::path::Path;
+use std::fs::File;
+use std::io::Read;
+
+pub fn main () {
+ let len = env::args().len();
+ if len <= 2 {
+ println!("usage: ar <path to archive> member")
+ } else {
+ let mut path = String::default();
+ let mut member = String::default();
+ for (i, arg) in env::args().enumerate() {
+ if i == 1 {
+ path = arg.as_str().to_owned();
+ } else if i == 2 {
+ member = arg.as_str().to_owned();
+ }
+ }
+ let path = Path::new(&path);
+ let buffer = { let mut v = Vec::new(); let mut f = File::open(&path).unwrap(); f.read_to_end(&mut v).unwrap(); v};
+ match archive::Archive::parse(&buffer) {
+ Ok(archive) => {
+ println!("{:#?}", &archive);
+ println!("start: {:?}", archive.member_of_symbol("_start"));
+ match archive.extract(&member, &buffer) {
+ Ok(bytes) => {
+ match elf::Elf::parse(&bytes) {
+ Ok(elf) => {
+ println!("got elf: {:#?}", elf);
+ },
+ Err(err) => println!("Err: {:?}", err)
+ }
+ },
+ Err(err) => println!("Extraction Error: {:?}", err)
+ }
+ },
+ Err(err) => println!("Err: {:?}", err)
+ }
+ }
+}