1use crate::{Function, Global, TypeDef, Vtable};
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
8#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
9pub struct Module {
10 pub name: String,
12 pub architecture: Architecture,
14 #[serde(with = "crate::hex::int")]
16 #[cfg_attr(feature = "schema", schemars(with = "String"))]
17 pub image_base: u64,
18 #[serde(with = "crate::hex::int")]
20 #[cfg_attr(feature = "schema", schemars(with = "String"))]
21 pub timestamp: u32,
22 #[serde(with = "crate::hex::int")]
24 #[cfg_attr(feature = "schema", schemars(with = "String"))]
25 pub image_size: u32,
26 #[serde(default, skip_serializing_if = "Option::is_none")]
28 pub hash: Option<ModuleHash>,
29 #[serde(default)]
31 pub types: Vec<TypeDef>,
32 #[serde(default)]
34 pub functions: Vec<Function>,
35 #[serde(default)]
37 pub globals: Vec<Global>,
38 #[serde(default)]
40 pub vtables: Vec<Vtable>,
41}
42
43#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
48#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
49#[serde(rename_all = "lowercase")]
50pub enum Architecture {
51 X86,
53 X64,
55}
56
57#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
59#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
60pub struct ModuleHash {
61 pub algorithm: HashAlgorithm,
63 pub value: String,
65}
66
67#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
69#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
70#[serde(rename_all = "snake_case")]
71#[non_exhaustive]
72pub enum HashAlgorithm {
73 Sha256,
75}