summaryrefslogtreecommitdiffhomepage
path: root/include/mdso/mdso_specs.h
blob: 63bc9f4423b8785c609db7396a8523a069c9e9aa (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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#ifndef MDSO_SPECS_H
#define MDSO_SPECS_H

#include <stdint.h>

#define MDSO_META_SECTION	".dsometa"
#define MDSO_SYMS_SECTION	".dsosyms"
#define MDSO_STRS_SECTION	".dsostrs"
#define MDSO_HASH_SECTION	".dsohash"
#define MDSO_DATA_SECTION	".dsodata"
#define MDSO_REFS_SECTION	".gotrefs"

#define MDSO_FLAG_LOADER_PATH	0x0001
#define MDSO_FLAG_LDSO_LIB	0x0002
#define MDSO_FLAG_PEB_PATH	0x0004
#define MDSO_FLAG_SYSTEM32	0x0008

struct mdso_arg;
struct mdso_meta_record;
struct mdso_hash_table;
struct mdso_sym_table;

typedef int32_t mdso_arg_conv_fn(char *, uint16_t **);
typedef int32_t mdso_arg_arr_conv_fn(struct mdso_arg *);

struct mdso_arg {
	char *		utf8;
	uint16_t *	utf16;
};

struct mdso_def_entry {
	void *				addr;
	char *				string;
};

struct mdso_got_entry {
	void *				addr;
	uintptr_t			rsymstr;
};

struct mdso_sym_entry {
	uintptr_t			rsymstr;
	uintptr_t			rmeta;
};

struct mdso_ref_entry {
	uintptr_t			rbackref;
	uintptr_t			rsymref;
};

struct mdso_meta_record {
	void *				base;
	const char *			name;
	uint32_t			flags;
	uint32_t			priority;
	uint32_t			nsyms;
	uint32_t			padding;
	struct mdso_hash_table *	hashtbl;
	struct mdso_sym_table *		symtbl;
	mdso_arg_conv_fn *		fncarg;
	mdso_arg_arr_conv_fn *		fncargarr;
	void *				fnr1;
	void *				fnr2;
};


struct mdso_meta_record_m32 {
	uint32_t			base;
	uint32_t			name;
	uint32_t			flags;
	uint32_t			priority;
	uint32_t			nsyms;
	uint32_t			padding;
	uint32_t			hashtbl;
	uint32_t			symtbl;
	uint32_t			fncarg;
	uint32_t			fncargarr;
	uint32_t			fnr1;
	uint32_t			fnr2;
};

struct mdso_meta_record_m64 {
	uint64_t			base;
	uint64_t			name;
	uint32_t			flags;
	uint32_t			priority;
	uint32_t			nsyms;
	uint32_t			padding;
	uint64_t			hashtbl;
	uint64_t			symtbl;
	uint64_t			fncarg;
	uint64_t			fncargarr;
	uint64_t			fnr1;
	uint64_t			fnr2;
};

#endif