use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ElfInfo {
#[serde(default)]
pub shared_libraries: Vec<String>,
#[serde(default)]
pub section_list: Vec<ElfSection>,
pub header: ElfHeader,
#[serde(default)]
pub export_list: Vec<ElfImportExport>,
#[serde(default)]
pub import_list: Vec<ElfImportExport>,
#[serde(default)]
pub segment_list: Vec<ElfSegment>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ElfSection {
#[serde(default)]
pub name: String,
pub section_type: String,
pub virtual_address: u64,
pub physical_offset: u64,
#[serde(default)]
pub flags: String,
pub size: u64,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ElfHeader {
pub hdr_version: String,
#[serde(rename = "type")]
pub elf_type: String,
pub obj_version: String,
pub data: String,
pub machine: String,
pub num_section_headers: u64,
pub os_abi: String,
pub abi_version: u32,
pub entrypoint: u64,
pub num_prog_headers: u64,
pub class: ElfClass,
}
#[derive(Clone, Copy, Debug, Hash, Serialize, Deserialize)]
pub enum ElfClass {
ELF32,
ELF64,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ElfImportExport {
#[serde(rename = "type")]
pub export_type: String,
pub name: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ElfSegment {
pub segment_type: String,
#[serde(default)]
pub resources: Vec<String>,
}