blob: 35f44947b4cf8cb5ddab58a507f01d314b53aa5a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#ifndef X86_BACKEND_H_
#define X86_BACKEND_H_
#include <stdint.h>
#define INVALID_OFFSET 0xFFFFFFFF
#define EXTENSION_WORD 0xFFFFFFFE
typedef struct {
int32_t disp;
uint8_t mode;
uint8_t base;
uint8_t index;
uint8_t cycles;
} x86_ea;
typedef struct {
uint8_t *base;
int32_t *offsets;
} native_map_slot;
typedef struct deferred_addr {
struct deferred_addr *next;
uint8_t *dest;
uint32_t address;
} deferred_addr;
#define MMAP_READ 0x1
#define MMAP_WRITE 0x2
#define MMAP_CODE 0x4
#define MMAP_PTR_IDX 0x8
typedef uint16_t (*read_16_fun)(uint32_t address, void * context);
typedef uint8_t (*read_8_fun)(uint32_t address, void * context);
typedef void * (*write_16_fun)(uint32_t address, void * context, uint16_t value);
typedef void * (*write_8_fun)(uint32_t address, void * context, uint8_t value);
typedef struct {
uint32_t start;
uint32_t end;
uint32_t mask;
uint16_t ptr_index;
uint16_t flags;
void * buffer;
read_16_fun read_16;
write_16_fun write_16;
read_8_fun read_8;
write_8_fun write_8;
} memmap_chunk;
typedef uint8_t * (*native_addr_func)(void * context, uint32_t address);
deferred_addr * defer_address(deferred_addr * old_head, uint32_t address, uint8_t *dest);
void remove_deferred_until(deferred_addr **head_ptr, deferred_addr * remove_to);
void process_deferred(deferred_addr ** head_ptr, void * context, native_addr_func get_native);
#endif //X86_BACKEND_H_
|