#![allow(unused_imports,dead_code)]
#[macro_use]
extern crate nom;
use nom::{Err,ErrorKind};
#[macro_use]
mod macros;
mod magic;
pub use self::magic::{
ElfAbi, Abi,
ElfEndian, Endian,
ElfClass, Class,
ElfMagicNumber,
};
mod header;
pub use self::header::{
ElfFileType, FileType,
ElfArch, Arch,
ElfHeaderBase, ElfHeader,
parse_elf
};
mod varsize;
pub use self::varsize::VarSize;
mod phdr;
pub use self::phdr::{PHDR};
mod section;
pub use self::section::{
SectionAttributes, SectMemAttrib,
SectionKind,SectionType,
Section,
Sections, SectionsIter,
};
mod symtable;
pub use self::symtable::{
SymBinding, SymbolBinding,
SymType, SymbolType,
SymProt, SymbolProtection,
SymEntry,
};
mod relocation;
pub mod prelude {
pub use super::{
Abi, Endian, Class,
FileType, Arch, ElfHeader,
SectionAttributes, SectMemAttrib, Section,
SymbolBinding, SymbolType, SymbolProtection, SymEntry,
};
}
#[derive(Debug,Clone,Copy)]
pub enum Fault {
IllegalMagicNumber, IllegalEndianness, IllegalClass, Bits32ParserFailed, TooSmol,
Complex,
HeaderDoesntExist,
Bits64ParserFailed,
StrTabNotInElf,
NameNotInStrTab,
SymTabNotInElf,
SymTabTooSmol,
}
#[inline(always)]
fn nom_bullshit<P>(x: Err<P,u32>) -> ErrorKind {
match x {
Err::Code(e) => e,
Err::Node(e,_) => e,
Err::Position(e,_) => e,
Err::NodePosition(e,_,_) => e
}
}
pub trait BufferBorrow<'a> {
fn get_buffer(&self) -> &'a [u8];
}