1 /* radare - LGPL - Copyright 2015 nodepad */
2 
3 #ifndef MZ_H
4 #define MZ_H
5 
6 #include <r_types.h>
7 #include <r_list.h>
8 #include <r_util.h>
9 #include <r_bin.h>
10 #include "mz_specs.h"
11 
12 struct r_bin_mz_segment_t {
13 	ut64 paddr;
14 	ut64 vaddr;
15 	ut64 size;
16 	int last;
17 };
18 
19 struct r_bin_mz_reloc_t {
20 	ut64 paddr;
21 	ut64 vaddr;
22 	int last;
23 };
24 
25 struct r_bin_mz_obj_t {
26 	const MZ_image_dos_header *dos_header;
27 	const void *dos_extended_header;
28 	MZ_image_relocation_entry *relocation_entries;
29 
30 	int dos_extended_header_size;
31 
32 	int size;
33 	int dos_file_size; /* Size of dos file from dos executable header */
34 	int load_module_size; /* Size of load module: dos_file_size - header size */
35 	const char *file;
36 	RBuffer *b;
37 	Sdb *kv;
38 };
39 
40 RBinAddr *r_bin_mz_get_entrypoint (const struct r_bin_mz_obj_t *bin);
41 RList *r_bin_mz_get_segments (const struct r_bin_mz_obj_t *bin);
42 struct r_bin_mz_reloc_t *r_bin_mz_get_relocs (const struct r_bin_mz_obj_t *bin);
43 void *r_bin_mz_free (struct r_bin_mz_obj_t *bin);
44 struct r_bin_mz_obj_t *r_bin_mz_new (const char *file);
45 struct r_bin_mz_obj_t *r_bin_mz_new_buf(RBuffer *buf);
46 RBinAddr *r_bin_mz_get_main_vaddr (struct r_bin_mz_obj_t *bin);
47 
48 #endif
49