diff options
Diffstat (limited to 'src/internal/mdso/mdso_specs.h')
-rw-r--r-- | src/internal/mdso/mdso_specs.h | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/src/internal/mdso/mdso_specs.h b/src/internal/mdso/mdso_specs.h new file mode 100644 index 0000000..cdbbd7c --- /dev/null +++ b/src/internal/mdso/mdso_specs.h @@ -0,0 +1,98 @@ +#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 { + uint32_t rsecrva; + uint32_t rbackref; + uint32_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 |