diff options
-rw-r--r-- | src/headers/pe_get_image_section_tbl_addr.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/headers/pe_get_image_section_tbl_addr.c b/src/headers/pe_get_image_section_tbl_addr.c index 3dad1f5..49b2957 100644 --- a/src/headers/pe_get_image_section_tbl_addr.c +++ b/src/headers/pe_get_image_section_tbl_addr.c @@ -10,11 +10,12 @@ #include <pemagine/pemagine.h> #include "pe_impl.h" -pe_api -struct pe_raw_sec_hdr * pe_get_image_section_tbl_addr (const void * base) + +struct pe_raw_sec_hdr * pe_get_image_section_tbl_addr(const void * base) { struct pe_raw_coff_file_hdr * coff; union pe_raw_opt_hdr * opt; + unsigned char * mark; if (!(coff = pe_get_image_coff_hdr_addr(base))) return 0; @@ -22,7 +23,11 @@ struct pe_raw_sec_hdr * pe_get_image_section_tbl_addr (const void * base) if (!(opt = pe_get_image_opt_hdr_addr(base))) return 0; - return (struct pe_raw_sec_hdr *)((char *)opt + *(uint16_t *)coff->size_of_opt_hdr); + mark = opt->opt_hdr_32.magic; + mark += coff->size_of_opt_hdr[1] << 8; + mark += coff->size_of_opt_hdr[0]; + + return (struct pe_raw_sec_hdr *)mark; } pe_api |