qemu_elf.h (1111B)
1/* 2 * Copyright (c) 2018 Virtuozzo International GmbH 3 * 4 * This work is licensed under the terms of the GNU GPL, version 2 or later. 5 */ 6 7#ifndef ELF2DMP_QEMU_ELF_H 8#define ELF2DMP_QEMU_ELF_H 9 10#include "elf.h" 11 12typedef struct QEMUCPUSegment { 13 uint32_t selector; 14 uint32_t limit; 15 uint32_t flags; 16 uint32_t pad; 17 uint64_t base; 18} QEMUCPUSegment; 19 20typedef struct QEMUCPUState { 21 uint32_t version; 22 uint32_t size; 23 uint64_t rax, rbx, rcx, rdx, rsi, rdi, rsp, rbp; 24 uint64_t r8, r9, r10, r11, r12, r13, r14, r15; 25 uint64_t rip, rflags; 26 QEMUCPUSegment cs, ds, es, fs, gs, ss; 27 QEMUCPUSegment ldt, tr, gdt, idt; 28 uint64_t cr[5]; 29 uint64_t kernel_gs_base; 30} QEMUCPUState; 31 32int is_system(QEMUCPUState *s); 33 34typedef struct QEMU_Elf { 35 GMappedFile *gmf; 36 size_t size; 37 void *map; 38 QEMUCPUState **state; 39 size_t state_nr; 40 int has_kernel_gs_base; 41} QEMU_Elf; 42 43int QEMU_Elf_init(QEMU_Elf *qe, const char *filename); 44void QEMU_Elf_exit(QEMU_Elf *qe); 45 46Elf64_Phdr *elf64_getphdr(void *map); 47Elf64_Half elf_getphdrnum(void *map); 48 49#endif /* ELF2DMP_QEMU_ELF_H */