/*****************************************************************************/ /* pemagination: a (virtual) tour into portable bits and executable bytes */ /* Copyright (C) 2013--2020 Z. Gilboa */ /* Released under GPLv2 and GPLv3; see COPYING.PEMAGINE. */ /*****************************************************************************/ #include #include #include #include void * pe_get_image_entry_point_addr(const void * base) { uint16_t * magic; union pe_raw_opt_hdr * hdr; uint32_t * rva; if (!(hdr = pe_get_image_opt_hdr_addr(base))) return 0; magic = (uint16_t *)hdr; switch (*magic) { case PE_MAGIC_PE32: rva = (uint32_t *)hdr->opt_hdr_32.coh_entry_point; break; case PE_MAGIC_PE32_PLUS: rva = (uint32_t *)hdr->opt_hdr_64.coh_entry_point; break; default: return 0; } return pe_va_from_rva(base,*rva); }