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(
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}