libintrovirt v0.57.4
IntroVirt introspection library
Loading...
Searching...
No Matches
Registers.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
24
25#include <cstdint>
26
27namespace introvirt {
28namespace x86 {
29
33class Registers {
34 public:
39 virtual uint64_t rax() const = 0;
44 virtual void rax(uint64_t val) = 0;
45
50 virtual uint64_t rbx() const = 0;
55 virtual void rbx(uint64_t val) = 0;
60 virtual uint64_t rcx() const = 0;
65 virtual void rcx(uint64_t val) = 0;
66
71 virtual uint64_t rdx() const = 0;
76 virtual void rdx(uint64_t val) = 0;
77
82 virtual uint64_t r15() const = 0;
87 virtual void r15(uint64_t val) = 0;
88
93 virtual uint64_t r14() const = 0;
98 virtual void r14(uint64_t val) = 0;
99
104 virtual uint64_t r13() const = 0;
109 virtual void r13(uint64_t val) = 0;
110
115 virtual uint64_t r12() const = 0;
120 virtual void r12(uint64_t val) = 0;
121
126 virtual uint64_t r11() const = 0;
131 virtual void r11(uint64_t val) = 0;
132
137 virtual uint64_t r10() const = 0;
142 virtual void r10(uint64_t val) = 0;
143
148 virtual uint64_t r9() const = 0;
153 virtual void r9(uint64_t val) = 0;
154
159 virtual uint64_t r8() const = 0;
164 virtual void r8(uint64_t val) = 0;
165
170 virtual uint64_t rsi() const = 0;
175 virtual void rsi(uint64_t val) = 0;
176
181 virtual uint64_t rdi() const = 0;
186 virtual void rdi(uint64_t val) = 0;
187
192 virtual uint64_t rsp() const = 0;
197 virtual void rsp(uint64_t val) = 0;
198
203 virtual uint64_t rbp() const = 0;
208 virtual void rbp(uint64_t val) = 0;
209
214 virtual uint64_t rip() const = 0;
219 virtual void rip(uint64_t val) = 0;
220
225 virtual Flags& rflags() = 0;
226
230 virtual const Flags& rflags() const = 0;
231
237 virtual void rflags(const Flags& val) = 0;
238
243 virtual Efer efer() const = 0;
244
252 virtual uint64_t msr(Msr msr) const = 0;
253
261 virtual void msr(Msr msr, uint64_t val) = 0;
262
268 virtual Segment cs() const = 0;
269
275 virtual void cs(x86::Segment seg) = 0;
276
283 virtual bool cs_long_mode() const = 0;
284
290 virtual Segment ds() const = 0;
291
297 virtual Segment es() const = 0;
298
304 virtual Segment fs() const = 0;
305
311 virtual Segment gs() const = 0;
312
318 virtual Segment ss() const = 0;
319
325 virtual Segment tr() const = 0;
326
332 virtual Segment ldt() const = 0;
333
338 virtual Cr0 cr0() const = 0;
339
344 virtual uint64_t cr2() const = 0;
345
350 virtual uint64_t cr3() const = 0;
351
356 virtual Cr4 cr4() const = 0;
357
362 virtual uint64_t cr8() const = 0;
363
369 virtual uint64_t gdtr_base() const = 0;
370
376 virtual uint32_t gdtr_limit() const = 0;
377
383 virtual uint64_t idtr_base() const = 0;
384
390 virtual uint32_t idtr_limit() const = 0;
391
395 virtual ~Registers() = default;
396};
397
398} // namespace x86
399
401
402} // namespace introvirt
The x86 Control Register 0.
Definition Cr0.hh:26
The x86 Control Register 4.
Definition Cr4.hh:26
The x86 Extended Feature Enable Register.
Definition Efer.hh:28
Handler for the x86 EFLAGS/RFLAGS register.
Definition Flags.hh:26
A class for holding x86 register state.
Definition Registers.hh:33
virtual uint64_t r10() const =0
Get the r10 register value.
virtual void r8(uint64_t val)=0
Set the r8 register value.
virtual uint64_t rax() const =0
Get the rax register value.
virtual Cr0 cr0() const =0
Get control register 0.
virtual void rip(uint64_t val)=0
Set the rip register value.
virtual void r15(uint64_t val)=0
Set the r15 register value.
virtual uint64_t gdtr_base() const =0
Get the gdtr segment base register.
virtual uint64_t msr(Msr msr) const =0
Get a raw MSR value.
virtual Segment cs() const =0
Get the code segment register.
virtual void rbp(uint64_t val)=0
Set the rbp register value.
virtual Segment gs() const =0
Get the GS register.
virtual Segment ss() const =0
Get the stack segment register.
virtual void rbx(uint64_t val)=0
Set the rbx register value.
virtual Segment tr() const =0
Get the task segment register.
virtual void rflags(const Flags &val)=0
Convenience method for rflags().value(val.value())
virtual uint64_t cr3() const =0
Get control register 3.
virtual Segment ldt() const =0
Get the segment descriptor for the ldt.
virtual uint64_t rbx() const =0
Get the rbx register value.
virtual Segment ds() const =0
Get the data segment register.
virtual bool cs_long_mode() const =0
Get long mode for the current code segment.
virtual uint32_t gdtr_limit() const =0
Get the gdtr segment limit register.
virtual void r10(uint64_t val)=0
Set the r10 register value.
virtual void r9(uint64_t val)=0
Set the r9 register value.
virtual const Flags & rflags() const =0
Get the rflags register value.
virtual Cr4 cr4() const =0
Get control register 4.
virtual void rdi(uint64_t val)=0
Set the rdi register value.
virtual void r13(uint64_t val)=0
Set the r13 register value.
virtual uint64_t r14() const =0
Get the r14 register value.
virtual uint64_t r11() const =0
Get the r11 register value.
virtual void msr(Msr msr, uint64_t val)=0
Set a raw MSR value.
virtual uint64_t rsp() const =0
Get the rsp register value.
virtual void rax(uint64_t val)=0
Set the rax register value.
virtual uint64_t rbp() const =0
Get the rbp register value.
virtual uint32_t idtr_limit() const =0
Get the interrupt descritor table limit.
virtual uint64_t r8() const =0
Get the r8 register value.
virtual ~Registers()=default
Destroy the instance.
virtual void rcx(uint64_t val)=0
Set the rcx register value.
virtual uint64_t rip() const =0
Get the rip register value.
virtual uint64_t r12() const =0
Get the r12 register value.
virtual void rsi(uint64_t val)=0
Set the rsi register value.
virtual uint64_t rsi() const =0
Get the rsi register value.
virtual void cs(x86::Segment seg)=0
Set the code segment register.
virtual void r11(uint64_t val)=0
Set the r11 register value.
virtual uint64_t cr8() const =0
Get control register 8.
virtual uint64_t r13() const =0
Get the r13 register value.
virtual uint64_t rdx() const =0
Get the rdx register value.
virtual Flags & rflags()=0
Get the rflags register value.
virtual void r12(uint64_t val)=0
Set the r12 register value.
virtual void rdx(uint64_t val)=0
Set the rdx register value.
virtual uint64_t idtr_base() const =0
Get the interrupt descritor table base address.
virtual uint64_t r15() const =0
Get the r15 register value.
virtual void rsp(uint64_t val)=0
Set the rsp register value.
virtual void r14(uint64_t val)=0
Set the r14 register value.
virtual Efer efer() const =0
Get the Efer MSR.
virtual uint64_t rcx() const =0
Get the rcx register value.
virtual uint64_t r9() const =0
Get the r9 register value.
virtual Segment es() const =0
Get the ES register.
virtual uint64_t cr2() const =0
Get control register 2.
virtual uint64_t rdi() const =0
Get the rdi register value.
virtual Segment fs() const =0
Get the FS register.
Class to represent an x86 segment register.
Definition Segment.hh:66
Msr
x86_64 MSR valueus TODO: Many values are missing from this enum
Definition Msr.hh:27
Core IntroVirt classes.
Definition Cr0.hh:20