#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_raw_image { char * addr; size_t size; }; struct pe_image_meta { struct pe_raw_image image; struct pe_meta_image_dos_hdr dos; struct pe_meta_coff_file_hdr coff; struct pe_meta_opt_hdr opt; struct pe_meta_sec_hdr * sectbl; struct pe_image_dos_hdr * ados; struct pe_coff_file_hdr * acoff; union pe_opt_hdr * aopt; struct pe_sec_hdr * asectbl; struct pe_meta_export_hdr edata; struct pe_export_hdr * aedata; struct pe_meta_sec_hdr * hedata; }; /* utility api */ int perk_main (int argc, char * argv[], char * envp[]); /* high-level api */ int pe_map_raw_image (int fd, char * fname, struct pe_raw_image *); int pe_unmap_raw_image (struct pe_raw_image *); int pe_get_image_meta (struct pe_raw_image * image, struct pe_image_meta ** meta); int pe_free_image_meta (struct pe_image_meta * meta); int pe_get_named_section_index (struct pe_image_meta * meta, char * name); int pe_output_export_symbols (struct pe_image_meta * meta, FILE * stream); /* 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 pe_read_section_header (struct pe_sec_hdr * p, struct pe_meta_sec_hdr * m); int pe_read_export_header (struct pe_export_hdr * p, struct pe_meta_export_hdr * m); #endif