use std::alloc::LayoutError; use thiserror::Error; use object::Error as ObjectError; use windows::core::Error as WindowsError; #[derive(Error, Debug)] pub enum LoadPEError { #[error("文件不存在: {0}")] FileNotFound(String), #[error("文件读取失败: {0}")] FileReadError(#[from] std::io::Error), #[error("文件解析失败: {0}")] ParseError(#[from] ObjectError), #[error("内存分配失败")] MemoryAllocFailed, #[error("可执行程序没有包含导入表!")] ExecutableWithoutImportTable, #[error("读取一个C风格字符串错误, {0}")] ReadCStringError(#[from] std::str::Utf8Error), #[error("LoadLibraryA错误!, {0}")] LoadLibraryError(#[from] WindowsError), #[error("GetProcAddress错误!, {0}")] GetProcAddressError(String), #[error("没有重定位表!")] NoRelocationTable, #[error(transparent)] LayoutError(#[from] LayoutError), #[error("更改内存属性失败!")] ChangeMemoryProtectFailed, }