diff options
Diffstat (limited to 'api/bits')
| -rw-r--r-- | api/bits/x86_64/descriptor.h | 18 | ||||
| -rw-r--r-- | api/bits/x86_64/msr.h | 29 |
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; +}; + |
