elf_utilities/dynamic/
elf64.rs

1use crate::*;
2use serde::{Deserialize, Serialize};
3
4#[derive(Default, Debug, Clone, Hash, PartialOrd, Ord, PartialEq, Eq, Serialize, Deserialize)]
5#[repr(C)]
6pub struct Dyn64 {
7    /// dynamic entry type
8    pub d_tag: Elf64Sxword,
9    /// value
10    pub d_un: Elf64Xword,
11}
12
13impl Dyn64 {
14    pub const SIZE: usize = 0x10;
15    pub fn get_type(&self) -> dynamic::EntryType {
16        dynamic::EntryType::from(self.d_tag)
17    }
18
19    pub fn to_le_bytes(&self) -> Vec<u8> {
20        bincode::serialize(self).unwrap()
21    }
22
23    pub fn deserialize(buf: &[u8], start: usize) -> Result<Self, Box<dyn std::error::Error>> {
24        // bincode::ErrorKindをトレイトオブジェクトとするため,この冗長な書き方が必要
25        match bincode::deserialize(&buf[start..]) {
26            Ok(header) => Ok(header),
27            Err(e) => Err(e),
28        }
29    }
30}