summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--perk/perk.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/perk/perk.h b/perk/perk.h
new file mode 100644
index 0000000..8efb90a
--- /dev/null
+++ b/perk/perk.h
@@ -0,0 +1,53 @@
+#ifndef PERK_H
+#define PERK_H
+
+#include <stdint.h>
+#include <stdio.h>
+
+#include "perk_consts.h"
+#include "perk_structs.h"
+#include "perk_meta.h"
+
+/* flags */
+#define PERK_HELP 0x01
+
+/* errors */
+#define PERK_OK 0x00
+#define PERK_BAD_OPT 0xA1
+#define PERK_BAD_OPT_VAL 0xA2
+#define PERK_IO_ERROR 0xA3
+#define PERK_MAP_ERROR 0xA4
+#define PERK_BAD_DOS_HEADER 0xA5
+#define PERK_BAD_COFF_HEADER 0xA6
+#define PERK_BAD_PE_IMAGE_TYPE 0xA7
+
+struct pe_image_map {
+ char * addr;
+ size_t size;
+};
+
+struct pe_image_meta {
+ struct pe_image_dos_hdr * ados;
+ struct pe_coff_file_hdr * acoff;
+ union pe_opt_hdr * aopt;
+
+ struct pe_meta_image_dos_hdr dos;
+ struct pe_meta_coff_file_hdr coff;
+ struct pe_meta_opt_hdr opt;
+};
+
+/* high-level api */
+int pe_map_image (int fd, char * fname, struct pe_image_map * map);
+int pe_unmap_image (struct pe_image_map);
+
+int pe_get_image_meta (char * image, struct pe_image_meta ** meta);
+int pe_free_image_meta (struct pe_image_meta * meta);
+
+/* low-level api */
+int pe_read_dos_header (struct pe_image_dos_hdr * p, struct pe_meta_image_dos_hdr * m);
+int pe_read_coff_header (struct pe_coff_file_hdr * p, struct pe_meta_coff_file_hdr * m);
+int pe_read_optional_header (union pe_opt_hdr * p, struct pe_meta_opt_hdr * m);
+
+int perk_main(int argc, char * argv[], char * envp[]);
+
+#endif