From d9ff959099805e5b7962dba296d041d65debd5a2 Mon Sep 17 00:00:00 2001 From: midipix Date: Sun, 26 Apr 2015 14:17:27 -0400 Subject: api sketch for libperk. --- perk/perk.h | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 perk/perk.h 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 +#include + +#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 -- cgit v1.2.3