99 lines
2.9 KiB
Rust
99 lines
2.9 KiB
Rust
//! # `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 relocatable object files and some executable files.
|
|
//!
|
|
//! ## Raw struct definitions
|
|
//!
|
|
//! Raw structs are defined for: [ELF](elf), [Mach-O](macho), [PE/COFF](pe),
|
|
//! [XCOFF](xcoff), [archive].
|
|
//! Types and traits for zerocopy support are defined in the [`pod`] and [`endian`] modules.
|
|
//!
|
|
//! ## Unified read API
|
|
//!
|
|
//! The [`read`] module provides a unified read API using the [`read::Object`] trait.
|
|
//! There is an implementation of this trait for [`read::File`], which allows reading any
|
|
//! file format, as well as implementations for each file format.
|
|
//!
|
|
//! ## Low level read API
|
|
//!
|
|
//! The [`read#modules`] submodules define helpers that operate on the raw structs.
|
|
//! These can be used instead of the unified API, or in conjunction with it to access
|
|
//! details that are not available via the unified API.
|
|
//!
|
|
//! ## Unified write API
|
|
//!
|
|
//! The [`mod@write`] module provides a unified write API for relocatable object files
|
|
//! using [`write::Object`]. This does not support writing executable files.
|
|
//!
|
|
//! ## Low level write API
|
|
//!
|
|
//! The [`mod@write#modules`] submodules define helpers for writing the raw structs.
|
|
//!
|
|
//! ## Shared definitions
|
|
//!
|
|
//! The crate provides a number of definitions that are used by both the read and write
|
|
//! APIs. These are defined at the top level module, but none of these are the main entry
|
|
//! points of the crate.
|
|
|
|
#![deny(missing_docs)]
|
|
#![deny(missing_debug_implementations)]
|
|
#![no_std]
|
|
#![warn(rust_2018_idioms)]
|
|
// Style.
|
|
#![allow(clippy::collapsible_if)]
|
|
#![allow(clippy::comparison_chain)]
|
|
#![allow(clippy::manual_flatten)]
|
|
#![allow(clippy::match_like_matches_macro)]
|
|
#![allow(clippy::single_match)]
|
|
#![allow(clippy::type_complexity)]
|
|
// Occurs due to fallible iteration.
|
|
#![allow(clippy::should_implement_trait)]
|
|
// Unit errors are converted to other types by callers.
|
|
#![allow(clippy::result_unit_err)]
|
|
// Worse readability sometimes.
|
|
#![allow(clippy::collapsible_else_if)]
|
|
|
|
#[cfg(feature = "cargo-all")]
|
|
compile_error!("'--all-features' is not supported; use '--features all' instead");
|
|
|
|
#[cfg(any(feature = "read_core", feature = "write_core"))]
|
|
#[allow(unused_imports)]
|
|
#[macro_use]
|
|
extern crate alloc;
|
|
|
|
#[cfg(feature = "std")]
|
|
#[allow(unused_imports)]
|
|
#[macro_use]
|
|
extern crate std;
|
|
|
|
mod common;
|
|
pub use common::*;
|
|
|
|
#[macro_use]
|
|
pub mod endian;
|
|
pub use endian::*;
|
|
|
|
#[macro_use]
|
|
pub mod pod;
|
|
pub use pod::*;
|
|
|
|
#[cfg(feature = "read_core")]
|
|
pub mod read;
|
|
#[cfg(feature = "read_core")]
|
|
pub use read::*;
|
|
|
|
#[cfg(feature = "write_core")]
|
|
pub mod write;
|
|
|
|
#[cfg(feature = "archive")]
|
|
pub mod archive;
|
|
#[cfg(feature = "elf")]
|
|
pub mod elf;
|
|
#[cfg(feature = "macho")]
|
|
pub mod macho;
|
|
#[cfg(any(feature = "coff", feature = "pe"))]
|
|
pub mod pe;
|
|
#[cfg(feature = "xcoff")]
|
|
pub mod xcoff;
|