use crate::Elf64Word;
pub const ELF_SECTION_HEADER_TYPE_NULL: Elf64Word = 0;
pub const ELF_SECTION_HEADER_TYPE_PROGBITS: Elf64Word = 1;
pub const ELF_SECTION_HEADER_TYPE_SYMTAB: Elf64Word = 2;
pub const ELF_SECTION_HEADER_TYPE_STRTAB: Elf64Word = 3;
pub const ELF_SECTION_HEADER_TYPE_RELA: Elf64Word = 4;
pub const ELF_SECTION_HEADER_TYPE_HASH: Elf64Word = 5;
pub const ELF_SECTION_HEADER_TYPE_DYNAMIC: Elf64Word = 6;
pub const ELF_SECTION_HEADER_TYPE_NOTE: Elf64Word = 7;
pub const ELF_SECTION_HEADER_TYPE_NOBITS: Elf64Word = 8;
pub const ELF_SECTION_HEADER_TYPE_REL: Elf64Word = 9;
pub const ELF_SECTION_HEADER_TYPE_SHLIB: Elf64Word = 10;
pub const ELF_SECTION_HEADER_TYPE_DYNSYM: Elf64Word = 11;
pub const ELF_SECTION_HEADER_TYPE_INIT_ARRAY: Elf64Word = 14;
pub const ELF_SECTION_HEADER_TYPE_FINI_ARRAY: Elf64Word = 15;
pub const ELF_SECTION_HEADER_TYPE_PREINIT_ARRAY: Elf64Word = 16;
pub const ELF_SECTION_HEADER_TYPE_GROUP: Elf64Word = 17;
pub const ELF_SECTION_HEADER_TYPE_SYMTAB_SHNDX: Elf64Word = 18;
pub const ELF_SECTION_HEADER_TYPE_NUM: Elf64Word = 19;
pub const ELF_SECTION_HEADER_TYPE_GNU_HASH: Elf64Word = 0x6ffffff6;
pub const ELF_SECTION_HEADER_TYPE_VERNEED: Elf64Word = 0x6ffffffe;
pub const ELF_SECTION_HEADER_TYPE_VERSYM: Elf64Word = 0x6fffffff;
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
pub enum SectionHeaderType {
Null,
ProgBits,
SymTab,
StrTab,
Rela,
Hash,
Dynamic,
Note,
NoBits,
Rel,
ShLib,
DynSym,
InitArray,
FiniArray,
PreinitArray,
Group,
SymTabShndx,
Num,
GnuHash,
VerSym,
VerNeed,
Any(Elf64Word),
}
impl Default for SectionHeaderType {
fn default() -> Self {
Self::Null
}
}
impl std::fmt::Display for SectionHeaderType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let s = match self {
SectionHeaderType::Null => "Null".to_string(),
SectionHeaderType::ProgBits => "ProgBits".to_string(),
SectionHeaderType::SymTab => "SymTab".to_string(),
SectionHeaderType::StrTab => "StrTab".to_string(),
SectionHeaderType::Rela => "Rela".to_string(),
SectionHeaderType::Hash => "Hash".to_string(),
SectionHeaderType::Dynamic => "Dynamic".to_string(),
SectionHeaderType::Note => "Note".to_string(),
SectionHeaderType::NoBits => "NoBits".to_string(),
SectionHeaderType::Rel => "Rel".to_string(),
SectionHeaderType::ShLib => "ShLib".to_string(),
SectionHeaderType::DynSym => "DynSym".to_string(),
SectionHeaderType::InitArray => "InitArray".to_string(),
SectionHeaderType::FiniArray => "FiniArray".to_string(),
SectionHeaderType::PreinitArray => "PreinitArray".to_string(),
SectionHeaderType::Group => "Group".to_string(),
SectionHeaderType::SymTabShndx => "SymTabShndx".to_string(),
SectionHeaderType::GnuHash => "GNU Hash".to_string(),
SectionHeaderType::VerSym => "VerSym".to_string(),
SectionHeaderType::VerNeed => "VerNeed".to_string(),
SectionHeaderType::Num => format!("Unknown!({})", ELF_SECTION_HEADER_TYPE_NUM),
SectionHeaderType::Any(v) => format!("Unknown!({})", v),
};
write!(f, "{}", s)
}
}
impl From<Elf64Word> for SectionHeaderType {
fn from(value: Elf64Word) -> Self {
match value {
ELF_SECTION_HEADER_TYPE_NULL => Self::Null,
ELF_SECTION_HEADER_TYPE_PROGBITS => Self::ProgBits,
ELF_SECTION_HEADER_TYPE_SYMTAB => Self::SymTab,
ELF_SECTION_HEADER_TYPE_STRTAB => Self::StrTab,
ELF_SECTION_HEADER_TYPE_RELA => Self::Rela,
ELF_SECTION_HEADER_TYPE_HASH => Self::Hash,
ELF_SECTION_HEADER_TYPE_DYNAMIC => Self::Dynamic,
ELF_SECTION_HEADER_TYPE_NOTE => Self::Note,
ELF_SECTION_HEADER_TYPE_NOBITS => Self::NoBits,
ELF_SECTION_HEADER_TYPE_REL => Self::Rel,
ELF_SECTION_HEADER_TYPE_SHLIB => Self::ShLib,
ELF_SECTION_HEADER_TYPE_DYNSYM => Self::DynSym,
ELF_SECTION_HEADER_TYPE_INIT_ARRAY => Self::InitArray,
ELF_SECTION_HEADER_TYPE_FINI_ARRAY => Self::FiniArray,
ELF_SECTION_HEADER_TYPE_PREINIT_ARRAY => Self::PreinitArray,
ELF_SECTION_HEADER_TYPE_GROUP => Self::Group,
ELF_SECTION_HEADER_TYPE_SYMTAB_SHNDX => Self::SymTabShndx,
ELF_SECTION_HEADER_TYPE_GNU_HASH => Self::GnuHash,
ELF_SECTION_HEADER_TYPE_VERSYM => Self::VerSym,
ELF_SECTION_HEADER_TYPE_VERNEED => Self::VerNeed,
ELF_SECTION_HEADER_TYPE_NUM => Self::Num,
_ => Self::Any(value),
}
}
}