Skip to main content

vmi_core/os/
dummy.rs

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