summaryrefslogtreecommitdiff
path: root/api/bits/x86_64
diff options
context:
space:
mode:
Diffstat (limited to 'api/bits/x86_64')
-rw-r--r--api/bits/x86_64/descriptor.h18
-rw-r--r--api/bits/x86_64/msr.h29
2 files changed, 47 insertions, 0 deletions
diff --git a/api/bits/x86_64/descriptor.h b/api/bits/x86_64/descriptor.h
new file mode 100644
index 0000000..649ac74
--- /dev/null
+++ b/api/bits/x86_64/descriptor.h
@@ -0,0 +1,18 @@
+#include <stdint.h>
+
+struct descriptor_table_register_long
+{
+ uint16_t limit;
+ uint64_t base;
+} __attribute__((packed, aligned(16)));
+
+struct segment_descriptor
+{
+ uint16_t limit0;
+ uint16_t base0;
+ uint8_t base16;
+ uint8_t access;
+ uint8_t flags_limit16;
+ uint8_t base24;
+} __attribute__((packed, aligned(8)));
+
diff --git a/api/bits/x86_64/msr.h b/api/bits/x86_64/msr.h
new file mode 100644
index 0000000..a25af7d
--- /dev/null
+++ b/api/bits/x86_64/msr.h
@@ -0,0 +1,29 @@
+#include <stdint.h>
+
+#define MSR_INDEX_EFER 0xc0000080
+#define MSR_INDEX_STAR 0xc0000081
+#define MSR_INDEX_LSTAR 0xc0000082
+
+union msr_efer
+{
+ uint64_t value;
+};
+
+union msr_star
+{
+ struct
+ {
+ uint32_t target_eip;
+ uint16_t syscall_segment_base;
+ uint16_t sysret_segment_base;
+ }
+ fields;
+ uint64_t value;
+};
+
+union msr_lstar
+{
+ uint64_t target_rip;
+ uint64_t value;
+};
+