1use super::{
2 ProcessId, ProcessObject, ThreadId, ThreadObject, VmiOs, VmiOsImage, VmiOsImageArchitecture,
3 VmiOsImageSymbol, VmiOsMapped, VmiOsModule, VmiOsProcess, VmiOsRegion, VmiOsRegionKind,
4 VmiOsThread,
5};
6use crate::{MemoryAccess, Pa, Va, VmiDriver, VmiError, VmiState, VmiVa};
7
8pub struct NoOS;
10
11impl VmiVa for NoOS {
12 fn va(&self) -> Va {
13 unimplemented!()
14 }
15}
16
17impl<Driver> VmiOs<Driver> for NoOS
18where
19 Driver: VmiDriver,
20{
21 type Process<'a> = NoOS;
22 type Thread<'a> = NoOS;
23 type Image<'a> = NoOS;
24 type Module<'a> = NoOS;
25 type Region<'a> = NoOS;
26 type Mapped<'a> = NoOS;
27
28 fn kernel_image_base(_vmi: VmiState<Driver, Self>) -> Result<Va, VmiError> {
29 unimplemented!()
30 }
31
32 fn kernel_information_string(_vmi: VmiState<Driver, Self>) -> Result<String, VmiError> {
33 unimplemented!()
34 }
35
36 fn kpti_enabled(_vmi: VmiState<Driver, Self>) -> Result<bool, VmiError> {
37 unimplemented!()
38 }
39
40 fn modules(
41 _vmi: VmiState<'_, Driver, Self>,
42 ) -> Result<impl Iterator<Item = Result<Self::Module<'_>, VmiError>> + '_, VmiError> {
43 #[expect(unreachable_code)]
44 {
45 unimplemented!() as Result<std::iter::Empty<_>, VmiError>
46 }
47 }
48
49 fn processes(
50 _vmi: VmiState<'_, Driver, Self>,
51 ) -> Result<impl Iterator<Item = Result<Self::Process<'_>, VmiError>> + '_, VmiError> {
52 #[expect(unreachable_code)]
53 {
54 unimplemented!() as Result<std::iter::Empty<_>, VmiError>
55 }
56 }
57
58 fn process<'a>(
59 _vmi: VmiState<'_, Driver, Self>,
60 _process: ProcessObject,
61 ) -> Result<Self::Process<'_>, VmiError> {
62 unimplemented!()
63 }
64
65 fn current_process<'a>(
66 _vmi: VmiState<'_, Driver, Self>,
67 ) -> Result<Self::Process<'_>, VmiError> {
68 unimplemented!()
69 }
70
71 fn system_process<'a>(_vmi: VmiState<'_, Driver, Self>) -> Result<Self::Process<'_>, VmiError> {
72 unimplemented!()
73 }
74
75 fn thread<'a>(
76 _vmi: VmiState<'_, Driver, Self>,
77 _thread: ThreadObject,
78 ) -> Result<Self::Thread<'_>, VmiError> {
79 unimplemented!()
80 }
81
82 fn current_thread(_vmi: VmiState<'_, Driver, Self>) -> Result<Self::Thread<'_>, VmiError> {
83 unimplemented!()
84 }
85
86 fn image<'a>(
87 _vmi: VmiState<'_, Driver, Self>,
88 _image_base: Va,
89 ) -> Result<Self::Image<'_>, VmiError> {
90 unimplemented!()
91 }
92
93 fn module<'a>(
94 _vmi: VmiState<'_, Driver, Self>,
95 _module: Va,
96 ) -> Result<Self::Module<'_>, VmiError> {
97 unimplemented!()
98 }
99
100 fn region<'a>(
101 _vmi: VmiState<'_, Driver, Self>,
102 _region: Va,
103 ) -> Result<Self::Region<'_>, VmiError> {
104 unimplemented!()
105 }
106
107 fn syscall_argument(_vmi: VmiState<Driver, Self>, _index: u64) -> Result<u64, VmiError> {
108 unimplemented!()
109 }
110
111 fn function_argument(_vmi: VmiState<Driver, Self>, _index: u64) -> Result<u64, VmiError> {
112 unimplemented!()
113 }
114
115 fn function_return_value(_vmi: VmiState<Driver, Self>) -> Result<u64, VmiError> {
116 unimplemented!()
117 }
118
119 fn last_error(_vmi: VmiState<Driver, Self>) -> Result<Option<u32>, VmiError> {
120 unimplemented!()
121 }
122}
123
124impl<Driver> VmiOsImage<'_, Driver> for NoOS
125where
126 Driver: VmiDriver,
127{
128 type Os = NoOS;
129
130 fn base_address(&self) -> Va {
131 unimplemented!()
132 }
133
134 fn architecture(&self) -> Result<Option<VmiOsImageArchitecture>, VmiError> {
135 unimplemented!()
136 }
137
138 fn exports(&self) -> Result<Vec<VmiOsImageSymbol>, VmiError> {
139 unimplemented!()
140 }
141}
142
143impl<Driver> VmiOsMapped<'_, Driver> for NoOS
144where
145 Driver: VmiDriver,
146{
147 type Os = NoOS;
148
149 fn path(&self) -> Result<Option<String>, VmiError> {
150 unimplemented!()
151 }
152}
153
154impl<Driver> VmiOsModule<'_, Driver> for NoOS
155where
156 Driver: VmiDriver,
157{
158 type Os = NoOS;
159
160 fn base_address(&self) -> Result<Va, VmiError> {
161 unimplemented!()
162 }
163
164 fn size(&self) -> Result<u64, VmiError> {
165 unimplemented!()
166 }
167
168 fn name(&self) -> Result<String, VmiError> {
169 unimplemented!()
170 }
171}
172
173impl<'a, Driver> VmiOsProcess<'a, Driver> for NoOS
174where
175 Driver: VmiDriver,
176{
177 type Os = NoOS;
178
179 fn id(&self) -> Result<ProcessId, VmiError> {
180 unimplemented!()
181 }
182
183 fn object(&self) -> Result<ProcessObject, VmiError> {
184 unimplemented!()
185 }
186
187 fn name(&self) -> Result<String, VmiError> {
188 unimplemented!()
189 }
190
191 fn parent_id(&self) -> Result<ProcessId, VmiError> {
192 unimplemented!()
193 }
194
195 fn architecture(&self) -> Result<VmiOsImageArchitecture, VmiError> {
196 unimplemented!()
197 }
198
199 fn translation_root(&self) -> Result<Pa, VmiError> {
200 unimplemented!()
201 }
202
203 fn user_translation_root(&self) -> Result<Pa, VmiError> {
204 unimplemented!()
205 }
206
207 fn image_base(&self) -> Result<Va, VmiError> {
208 unimplemented!()
209 }
210
211 fn regions(
212 &self,
213 ) -> Result<
214 impl Iterator<Item = Result<<Self::Os as VmiOs<Driver>>::Region<'_>, VmiError>>,
215 VmiError,
216 > {
217 #[expect(unreachable_code)]
218 {
219 unimplemented!() as Result<std::iter::Empty<_>, VmiError>
220 }
221 }
222
223 fn find_region(
224 &self,
225 _address: Va,
226 ) -> Result<Option<<Self::Os as VmiOs<Driver>>::Region<'a>>, VmiError> {
227 unimplemented!()
228 }
229
230 fn threads(
231 &self,
232 ) -> Result<
233 impl Iterator<Item = Result<<Self::Os as VmiOs<Driver>>::Thread<'a>, VmiError>>,
234 VmiError,
235 > {
236 #[expect(unreachable_code)]
237 {
238 unimplemented!() as Result<std::iter::Empty<_>, VmiError>
239 }
240 }
241
242 fn is_valid_address(&self, _address: Va) -> Result<Option<bool>, VmiError> {
243 unimplemented!()
244 }
245}
246
247impl<'a, Driver> VmiOsRegion<'a, Driver> for NoOS
248where
249 Driver: VmiDriver,
250{
251 type Os = NoOS;
252
253 fn start(&self) -> Result<Va, VmiError> {
254 unimplemented!()
255 }
256
257 fn end(&self) -> Result<Va, VmiError> {
258 unimplemented!()
259 }
260
261 fn protection(&self) -> Result<MemoryAccess, VmiError> {
262 unimplemented!()
263 }
264
265 fn kind(&self) -> Result<VmiOsRegionKind<'a, Driver, Self::Os>, VmiError> {
266 unimplemented!()
267 }
268}
269
270impl<Driver> VmiOsThread<'_, Driver> for NoOS
271where
272 Driver: VmiDriver,
273{
274 type Os = NoOS;
275
276 fn id(&self) -> Result<ThreadId, VmiError> {
277 unimplemented!()
278 }
279
280 fn object(&self) -> Result<ThreadObject, VmiError> {
281 unimplemented!()
282 }
283}