1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
//! Raw `FieldRva` structures for the `FieldRva` metadata table.
//!
//! This module provides the [`FieldRvaRaw`] struct for reading field RVA data
//! directly from metadata tables before index resolution. The `FieldRva` table specifies
//! Relative Virtual Addresses for fields that have initial data stored in the PE file.
//!
//! # Table Structure
//! The `FieldRva` table (`TableId` = 0x1D) contains these columns:
//! - `RVA`: 4-byte Relative Virtual Address pointing to field data
//! - `Field`: Index into Field table identifying the field with initial data
//!
//! # RVA Purpose
//! `FieldRva` entries enable static field initialization and data embedding:
//! - **Static field initialization**: Pre-computed values for static fields
//! - **Constant data**: Read-only data embedded in the PE file
//! - **Global variables**: Module-level data with specific initial states
//! - **Interop data**: Native data for P/Invoke operations
//! - **Resource embedding**: Binary resources accessible through fields
//!
//! # ECMA-335 Reference
//! See ECMA-335, Partition II, §22.19 for the `FieldRva` table specification.
use Arc;
use crate::;
/// Raw field RVA data read directly from the `FieldRva` metadata table.
///
/// This structure represents a field RVA entry before index resolution and field
/// dereferencing. Field RVAs specify the location of initial data for fields that
/// have pre-computed values stored in the PE file.
///
/// # Binary Format
/// Each row in the `FieldRva` table has this layout:
/// ```text
/// Offset | Size | Field | Description
/// -------|------|-------|----------------------------------
/// 0 | 4 | RVA | Relative Virtual Address
/// 4 | 2/4 | Field | Field table index
/// ```
///
/// The Field index size depends on the number of entries in the Field table.
///
/// # RVA Context
/// `FieldRva` entries define data locations for:
/// - **Static arrays**: Pre-initialized array data embedded in PE file
/// - **Constant strings**: String literals stored in read-only sections
/// - **Numeric constants**: Pre-computed values for mathematical constants
/// - **Lookup tables**: Read-only data tables for algorithms
/// - **Binary resources**: Raw data accessible through field references
///
/// # PE Integration
/// RVAs integrate with PE file structure:
/// - **Section mapping**: RVAs resolve to specific PE sections
/// - **Memory layout**: Data positioned for efficient runtime access
/// - **File alignment**: Data aligned according to PE requirements
/// - **Protection flags**: Sections marked with appropriate permissions
///
/// # ECMA-335 Reference
/// See ECMA-335, Partition II, §22.19 for the complete `FieldRva` table specification.