summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2015-04-26 14:17:27 -0400
committermidipix <writeonce@midipix.org>2015-04-26 14:17:27 -0400
commitd9ff959099805e5b7962dba296d041d65debd5a2 (patch)
tree99acb48fa8376a6dbf89e2c1daaac01ca0d20408
parent177080c6d76baff035babd703003e5c65c5c8ad1 (diff)
downloadscrap-d9ff959099805e5b7962dba296d041d65debd5a2.tar.bz2
scrap-d9ff959099805e5b7962dba296d041d65debd5a2.tar.xz
api sketch for libperk.
-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