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
8pub 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}