styles: 更改一些样式
This commit is contained in:
@@ -1,10 +1,9 @@
|
||||
use super::types::*;
|
||||
use bitflags::bitflags;
|
||||
use pe_serialize_proc_macro::SerializeEX;
|
||||
use serde::ser::SerializeStruct;
|
||||
use serde::Serialize;
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Clone, Copy, SerializeEX)]
|
||||
#[derive(Debug, Clone, Copy, Serialize)]
|
||||
pub struct ImageDosHeader {
|
||||
pub e_magic: u16, // Magic number 固定值 0x5A4D
|
||||
pub e_cblp: u16,
|
||||
@@ -24,10 +23,11 @@ pub struct ImageDosHeader {
|
||||
pub e_oemid: u16,
|
||||
pub e_oeminfo: u16,
|
||||
pub e_res2: [u16; 10],
|
||||
pub e_lfanew: u32, // File address of new exe header nt头的偏移
|
||||
pub e_lfanew: Offset, // File address of new exe header nt头的偏移
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Clone, Copy, Serialize)]
|
||||
pub struct ImageNTHeaders32 {
|
||||
pub signature: u32,
|
||||
pub file_header: ImageFileHeader,
|
||||
@@ -35,6 +35,7 @@ pub struct ImageNTHeaders32 {
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Clone, Copy, Serialize)]
|
||||
pub struct ImageFileHeader {
|
||||
pub machine: u16,
|
||||
pub number_of_sections: u16,
|
||||
@@ -46,6 +47,7 @@ pub struct ImageFileHeader {
|
||||
}
|
||||
bitflags! {
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Clone, Copy, Serialize)]
|
||||
pub struct FileCharacteristics: u16 {
|
||||
const RELOCS_STRIPPED = 0x0001;
|
||||
const EXECUTABLE_IMAGE = 0x0002;
|
||||
@@ -64,6 +66,7 @@ bitflags! {
|
||||
const BYTES_REVERSED_HI = 0x8000;
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Clone, Copy, Serialize)]
|
||||
pub struct DLLCharacteristics: u16 {
|
||||
const RESERVED1 = 0x0001;
|
||||
const RESERVED2 = 0x0002;
|
||||
@@ -83,6 +86,7 @@ bitflags! {
|
||||
}
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Clone, Copy, Serialize)]
|
||||
pub struct ImageOptionalHeader32 {
|
||||
pub magic: u16,
|
||||
pub major_linker_version: u8,
|
||||
|
||||
@@ -32,4 +32,49 @@ pub trait PE: Deref<Target = [u8]> + DerefMut<Target = [u8]> + Sized {
|
||||
let result = self.get_mut::<ImageDosHeader>(0)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
/// Get the NT headers without verifying its contents.
|
||||
fn get_nt_headers(&self) -> Result<&ImageNTHeaders32, PEParseError> {
|
||||
let nt_offset = self.get_nt_headers_offset()?;
|
||||
let result = self.get_ref::<ImageNTHeaders32>(nt_offset)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
// 获取nt头的偏移
|
||||
fn get_nt_headers_offset(&self) -> Result<usize, PEParseError> {
|
||||
let dos_header = self.get_dos_header()?;
|
||||
let nt_offset = dos_header.e_lfanew.0 as usize;
|
||||
Ok(nt_offset)
|
||||
}
|
||||
|
||||
/// Get the NT headers without mutating its contents.
|
||||
fn get_nt_headers_mut(&mut self) -> Result<&mut ImageNTHeaders32, PEParseError> {
|
||||
let nt_offset = self.get_nt_headers_offset()?;
|
||||
let result = self.get_mut::<ImageNTHeaders32>(nt_offset)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
// 获取文件头的偏移
|
||||
fn get_file_header_offset(&self) -> Result<usize, PEParseError> {
|
||||
// 1. 获取nt头偏移
|
||||
let nt_offset = self.get_nt_headers_offset()?;
|
||||
// 2. 计算文件头偏移
|
||||
let file_header_offset = nt_offset + std::mem::size_of::<u32>();
|
||||
Ok(file_header_offset)
|
||||
}
|
||||
|
||||
// 获取文件头数据
|
||||
fn get_file_header(&self) -> Result<&ImageFileHeader, PEParseError> {
|
||||
let file_header_offset = self.get_file_header_offset()?;
|
||||
let result = self.get_ref::<ImageFileHeader>(file_header_offset)?;
|
||||
Ok(result)
|
||||
}
|
||||
// 获取文件头数据
|
||||
fn get_file_header_mut(&mut self) -> Result<&mut ImageFileHeader, PEParseError> {
|
||||
let file_header_offset = self.get_file_header_offset()?;
|
||||
let result = self.get_mut::<ImageFileHeader>(file_header_offset)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,9 +1,18 @@
|
||||
use std::fmt::{Formatter, UpperHex};
|
||||
|
||||
use serde::Serialize;
|
||||
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Clone, Copy, Serialize)]
|
||||
pub struct Offset(pub u32);
|
||||
|
||||
impl UpperHex for Offset {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
||||
self.0.fmt(f)
|
||||
}
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Clone, Copy, Serialize)]
|
||||
pub struct RVA(pub u32);
|
||||
|
||||
Reference in New Issue
Block a user