| # `object` |
| |
| The `object` crate provides a unified interface to working with object files |
| across platforms. It supports reading relocatable object files and executable files, |
| and writing COFF/ELF/Mach-O/XCOFF relocatable object files and ELF/PE executable files. |
| |
| For reading files, it provides multiple levels of support: |
| |
| * raw struct definitions suitable for zero copy access |
| * low level APIs for accessing the raw structs ([example](crates/examples/src/readobj/)) |
| * a higher level unified API for accessing common features of object files, such |
| as sections and symbols ([example](crates/examples/src/objdump.rs)) |
| |
| Supported file formats: ELF, Mach-O, Windows PE/COFF, Wasm, XCOFF, and Unix archive. |
| |
| ## Example for unified read API |
| ```rust |
| use object::{Object, ObjectSection}; |
| use std::error::Error; |
| use std::fs; |
| |
| /// Reads a file and displays the name of each section. |
| fn main() -> Result<(), Box<dyn Error>> { |
| let binary_data = fs::read("path/to/binary")?; |
| let file = object::File::parse(&*binary_data)?; |
| for section in file.sections() { |
| println!("{}", section.name()?); |
| } |
| Ok(()) |
| } |
| ``` |
| |
| See [`crates/examples`](crates/examples) for more examples. |
| |
| ## Minimum Supported Rust Version (MSRV) |
| |
| Changes to MSRV are considered breaking changes. We are conservative about changing the MSRV, |
| but sometimes are required to due to dependencies. The MSRV is: |
| |
| * 1.60.0 for the `read` feature and its dependencies. |
| * 1.65.0 for other features. |
| |
| ## License |
| |
| Licensed under either of |
| |
| * Apache License, Version 2.0 ([`LICENSE-APACHE`](./LICENSE-APACHE) or https://www.apache.org/licenses/LICENSE-2.0) |
| * MIT license ([`LICENSE-MIT`](./LICENSE-MIT) or https://opensource.org/licenses/MIT) |
| |
| at your option. |
| |
| ## Contribution |
| |
| Unless you explicitly state otherwise, any contribution intentionally submitted |
| for inclusion in the work by you, as defined in the Apache-2.0 license, shall be |
| dual licensed as above, without any additional terms or conditions. |