1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
use crate::section::Type; pub trait Section { type Header; type Symbol; type Dyn; type Rela; fn new(header: Self::Header) -> Self; fn header_size() -> usize; fn size_zero(&self) -> bool; fn offset(&self) -> usize; fn name_idx(&self) -> usize; fn section_type(&self) -> Type; fn entry_size(&self) -> usize; fn section_size(&self) -> usize; fn clone_contents(&self) -> Vec<u8>; fn parse_bytes_as_symbols(&self, related_string_table: &Self) -> Vec<Self::Symbol>; fn parse_bytes_as_dynamics(&self) -> Vec<Self::Dyn>; fn parse_bytes_as_relas(&self) -> Vec<Self::Rela>; fn header_deserialize( buf: &[u8], header_start: usize, ) -> Result<Self::Header, Box<dyn std::error::Error>>; fn update_contents(&mut self, contents: Vec<u8>); fn update_name(&mut self, name: String); }