diff options
author | iximeow <me@iximeow.net> | 2022-01-02 00:01:55 -0800 |
---|---|---|
committer | iximeow <me@iximeow.net> | 2022-01-02 00:01:55 -0800 |
commit | 39f183cb5ea8f5514a0010b9b9a43f2d449567cd (patch) | |
tree | 8e99e821be5b732cb580eeed70489796ad4aa651 /src/lib.rs | |
parent | e25377ab89d6c767d9b7947831a967bbbb93dc92 (diff) |
document the crate
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 50 |
1 files changed, 50 insertions, 0 deletions
@@ -1,4 +1,52 @@ +//! # `yaxpeax-arm`, a decoder for `arm` instruction sets. +//! +//! `yaxpeax-arm` provides `armv7` (and below) decoders, including `thumb` support, as well a +//! decoder for `armv8`/`a64`. +//! +//! ## usage +//! +//! `yaxpeax-arm` is currently only usable through `yaxpeax-arch` traits: +//! ``` +//! mod decoder { +//! use yaxpeax_arch::{Arch, AddressDisplay, Decoder, Reader, ReaderBuilder}; +//! +//! pub fn decode_stream< +//! 'data, +//! A: yaxpeax_arch::Arch, +//! U: ReaderBuilder<A::Address, A::Word>, +//! >(data: U) where +//! A::Instruction: std::fmt::Display, +//! { +//! let mut reader = ReaderBuilder::read_from(data); +//! let mut address: A::Address = reader.total_offset(); +//! +//! let decoder = A::Decoder::default(); +//! let mut decode_res = decoder.decode(&mut reader); +//! loop { +//! match decode_res { +//! Ok(ref inst) => { +//! println!("{}: {}", address.show(), inst); +//! decode_res = decoder.decode(&mut reader); +//! address = reader.total_offset(); +//! } +//! Err(e) => { +//! println!("{}: decode error: {}", address.show(), e); +//! break; +//! } +//! } +//! } +//! } +//! } +//! +//! use yaxpeax_arm::armv8::a64::Arch; +//! use yaxpeax_arch::{ReaderBuilder, U8Reader}; +//! let data: &[u8] = &[0x94, 0x02, 0x1e, 0x32]; +//! // would display `orr w20, w20, #0x4`. +//! decoder::decode_stream::<x86_64, _>(data); +//! ``` + #![no_std] +#![deny(missing_docs)] #[cfg(feature="use-serde")] #[macro_use] extern crate serde_derive; @@ -7,5 +55,7 @@ extern crate serde; extern crate yaxpeax_arch; extern crate bitvec; +/// `yaxpeax-arm`'s `ARMv7` decoder and `Arch` implementation. pub mod armv7; +/// `yaxpeax-arm`'s `ARMv8` decoder and `Arch` implementation. pub mod armv8; |