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 37 38 39 40 41 42 43
use crate::section; pub trait Section { type Header; type Contents : Contents; fn new(header: Self::Header) -> Self; fn clone_contents(&self) -> Self::Contents; fn clone_raw_binary(&self) -> Vec<u8>; fn update_contents_from_raw_bytes(&mut self, bytes: Vec<u8>); fn symbol_number(&self) -> usize; fn update_symbol_name(&mut self, sym_idx: usize, name_bytes: &[u8]); fn header_size() -> usize; fn size_zero(&self) -> bool; fn offset(&self) -> usize; fn name_idx(&self) -> usize; fn section_link(&self) -> usize; fn section_type(&self) -> section::Type; fn entry_size(&self) -> usize; fn section_size(&self) -> usize; fn header_deserialize( buf: &[u8], header_start: usize, ) -> Result<Self::Header, Box<dyn std::error::Error>>; fn update_name(&mut self, name: String); } pub trait Contents { type Symbol; type Dyn; type Rela; fn clone_raw_binary(&self) -> Vec<u8>; fn clone_symbols(&self) -> Vec<Self::Symbol>; fn clone_dynamics(&self) -> Vec<Self::Dyn>; fn clone_rela_symbols(&self) -> Vec<Self::Rela>; }