From 6a653b35990e9a642dd4af9b8ee5742d5a84956c Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 16 Sep 2009 22:24:08 -0700 Subject: Adding basic Database structure. --- Database/database-types.h | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 Database/database-types.h (limited to 'Database/database-types.h') diff --git a/Database/database-types.h b/Database/database-types.h new file mode 100644 index 0000000..95c5ebd --- /dev/null +++ b/Database/database-types.h @@ -0,0 +1,47 @@ +#ifndef __DATABASE_TYPES_H__ +#define __DATABASE_TYPES_H__ + +/** The basic tags that describe the bytes of the database. The tag "CODE_FIRST_BYTE" is + * mainly for multi-bytes instructions, in order to help the UI displaying + * properly the instructions. + */ + +enum basic_tags_t { + TAG_UNKNOWN = 0, + TAG_CODE, + TAG_DATA, + TAG_CODE_FIRST_BYTE, +}; + +/** The 8-bits tag for a byte. The certitude part + * A non-hollow database will be as big (at least) as the input file: in-memory-RLE is probably a good idea. + */ +struct memory_tags_t { + unsigned short basic_tags: 2; + /** -1..30, 30 being "user hinted", 29 being "external reference" (entry point, exported symbol, ...) + * and -1 means something's fishy with that tag, and that it is probably completely wrong. + * Certitude will grow down with distance from a certain piece of info when the crawler goes away jumping around. + */ + unsigned short certitude: 6; +}; + +/** An absolute pointer can reference a segment from its ID, and a pointer within the segment. + */ + +typedef union { + Uint64 raw_ptr; + struct { + Uint32 segment_id; + Uint32 ptr; + }; +} absolute_ptr; + +/** A function description. + */ + +struct function_t { + absolute_ptr start; + Uint32 size; +}; + +#endif -- cgit v1.2.3