#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