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};
7
8/// Marker type for a missing OS implementation.
9pub 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}