summaryrefslogtreecommitdiff
path: root/Database/database-types.h
diff options
context:
space:
mode:
Diffstat (limited to 'Database/database-types.h')
-rw-r--r--Database/database-types.h47
1 files changed, 47 insertions, 0 deletions
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