rust_dos_header/dos/
structs.rs

1// Word 类型,这里单纯至少为了阅读理解,尽量保持于原版一致
2pub type Word = u16;
3// 结构体 DosHeader
4#[repr(C)]
5#[derive(Debug)]
6pub struct DosHeader {
7    pub e_magic: Word,      // DOS可执行文件标记
8    pub e_cblp: Word,       // 堆栈段大小
9    pub e_cp: Word,         // 文件中的重定位项数量
10    pub e_crlc: Word,       // 重定位项大小
11    pub e_cparhdr: Word,    // 转移地址
12    pub e_minalloc: Word,   // 最小分配大小
13    pub e_maxalloc: Word,   // 最大分配大小
14    pub e_ss: Word,         // 初始堆栈段
15    pub e_sp: Word,         // 初始堆栈指针
16    pub e_csum: Word,       // 校验和
17    pub e_ip: Word,         // 初始指令指针
18    pub e_cs: Word,         // 初始代码段
19    pub e_lfarlc: Word,     // 重定位表文件地址
20    pub e_ovno: Word,       // 覆盖号
21    pub e_res: [Word; 4],   // 保留字
22    pub e_oemid: Word,      // OEM标识符
23    pub e_oeminfo: Word,    // OEM信息
24    pub e_res2: [Word; 10], // 保留字
25    pub e_lfanew: u32,     // PE头文件地址
26}
27
28pub fn word_to_string(word: Word) -> Result<String, Box<dyn std::error::Error>> {
29    let vec_u8: Vec<u8> = word.to_le_bytes().to_vec();
30    Ok(String::from_utf8(vec_u8)?)
31}