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