Skip to main content

clr_assembler/program/
legacy.rs

1/// 旧版本的 CLR 头结构,用于向后兼容
2#[derive(Copy, Debug, Clone)]
3pub struct ClrHeader {
4    /// 头的总大小(字节)
5    pub cb: u32,
6    /// CLR 运行时主版本号
7    pub major_runtime_version: u16,
8    /// CLR 运行时次版本号
9    pub minor_runtime_version: u16,
10    /// 元数据的相对虚拟地址
11    pub metadata_rva: u32,
12    /// 元数据的大小(字节)
13    pub metadata_size: u32,
14    /// 程序集的标志位,如是否为纯 IL 代码等
15    pub flags: u32,
16}
17
18/// 旧版本的元数据头结构,用于向后兼容
19#[derive(Debug, Clone)]
20pub struct MetadataHeader {
21    /// 魔数,通常为 0x424A5342 (BSJB)
22    pub signature: u32,
23    /// 元数据格式主版本
24    pub major_version: u16,
25    /// 元数据格式次版本
26    pub minor_version: u16,
27    /// 保留字段,通常为 0
28    pub reserved: u32,
29    /// 运行时版本字符串的长度
30    pub version_length: u32,
31    /// 运行时版本字符串的内容
32    pub version_string: String,
33    /// 元数据标志位
34    pub flags: u16,
35    /// 元数据流的数量
36    pub streams: u16,
37}
38
39/// 旧版本的流头结构,用于向后兼容
40#[derive(Debug, Clone)]
41pub struct StreamHeader {
42    /// 该流在元数据中的偏移量
43    pub offset: u32,
44    /// 流的大小(字节)
45    pub size: u32,
46    /// 流的名称,如 "#Strings"、"#US"、"#GUID"、"#Blob" 等
47    pub name: String,
48}
49
50/// 旧版本的 .NET 程序集信息,用于向后兼容
51#[derive(Debug, Clone)]
52pub struct DotNetAssemblyInfo {
53    /// 程序集名称
54    pub name: String,
55    /// 版本号,格式为 major.minor.build.revision
56    pub version: String,
57    /// 文化区域信息,如 "zh-CN",null 表示中性文化
58    pub culture: Option<String>,
59    /// 公钥标记,用于强名称验证
60    pub public_key_token: Option<String>,
61    /// .NET 运行时版本,如 "v4.0.30319"
62    pub runtime_version: Option<String>,
63}