libintrovirt v0.57.4
IntroVirt introspection library
Loading...
Searching...
No Matches
fwd.hh
Go to the documentation of this file.
1/*
2 * Copyright 2021 Assured Information Security, Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16#pragma once
17
19#include <type_traits>
20
28namespace introvirt {
29
30class Breakpoint;
31class SingleStep;
32class Watchpoint;
33
34class Domain;
35class Guest;
36class Hypervisor;
37class Vcpu;
38
39class ControlRegisterEvent;
40class Event;
41class EventCallback;
42class EventFilter;
43class EventTaskInformation;
44class ExceptionEvent;
45class MemAccessEvent;
46class MsrAccessEvent;
47class SystemCallEvent;
48enum class EventType : int;
49
50class AllocationFailedException;
51class BadPhysicalAddressException;
52class BufferTooSmallException;
53class CommandFailedException;
54class DomainBusyException;
55class EventPollException;
56class GuestDetectionException;
57class InterruptedException;
58class InvalidMethodException;
59class InvalidVcpuException;
60class MemoryException;
61class NoSuchDomainException;
62class NotImplementedException;
63class NullAddressException;
64class SystemCallInjectionException;
65class TraceableException;
66class UnsupportedHypervisorException;
67class VirtualAddressNotPresentException;
68
69class TaskFilter;
70
71class FunctionCall;
72
73class GuestMemoryMapping;
74
75class SystemCall;
76class SystemCallFilter;
77
78/* Dummy class used for automatically getting the correct size */
79class guest_size_t;
81
82template <typename _Tp>
83struct identity {
84 using type = _Tp;
85};
86
87template <typename _Tp>
89 : std::conditional_t<std::is_pointer_v<_Tp>, remove_all_pointers<std::remove_pointer_t<_Tp>>,
90 identity<_Tp>> {};
91
92template <typename _Tp>
94
95template <typename _Tp, typename Enable = void>
96struct is_guest_size : std::false_type {};
97
98template <typename _Tp>
100 _Tp,
101 std::enable_if_t<std::is_same_v<
102 guest_size_t, std::remove_const_t<remove_all_pointers_t<std::remove_all_extents_t<_Tp>>>>>>
103 : std::true_type {};
104
105template <typename _Tp>
107
108// Some tests
109static_assert(is_guest_size_v<guest_size_t>, "guest_size_t failed check");
110static_assert(is_guest_size_v<guest_size_t[]>, "guest_size_t failed check");
111static_assert(is_guest_size_v<const guest_size_t>, "guest_size_t failed check");
112static_assert(is_guest_size_v<const guest_size_t[]>, "guest_size_t failed check");
113static_assert(is_guest_size_v<guest_size_t*>, "guest_size_t failed check");
114static_assert(is_guest_size_v<const guest_size_t**>, "guest_size_t failed check");
115static_assert(is_guest_size_v<const guest_size_t*[]>, "guest_size_t failed check");
116
117template <typename _Tp, typename _PtrType, bool _Physical, typename _Enabled = void>
118class basic_guest_ptr;
119
120template <typename _Tp, typename _PtrType, bool _Physical>
121class basic_guest_ptr<_Tp, _PtrType, _Physical, std::enable_if_t<is_guest_size_v<_Tp>>>;
122
123template <typename _Tp, typename _PtrType = void>
124using guest_ptr = basic_guest_ptr<_Tp, _PtrType, false>;
125
126template <typename _Tp, typename _PtrType = void>
127using guest_phys_ptr = basic_guest_ptr<_Tp, _PtrType, true>;
128
129} // namespace introvirt
Definition guest_ptr.hh:88
Helper class to transparently convert between guest size and a value.
Definition guest_size_t_ptr.hh:498
Core IntroVirt classes.
Definition Cr0.hh:20
constexpr bool is_guest_size_v
Definition fwd.hh:106
EventType
Enum describing a hypervisor event.
Definition EventType.hh:29
typename remove_all_pointers< _Tp >::type remove_all_pointers_t
Definition fwd.hh:93
Definition fwd.hh:83
_Tp type
Definition fwd.hh:84
Definition fwd.hh:96
Definition fwd.hh:90