Win64/PE: Changed runtime function unwind info to be added after relocation, fixes SEH + long jmps

master
janus.lt 2017-11-04 00:16:37 +01:00
parent fc0188ffbc
commit 32c9b51401
1 changed files with 5 additions and 4 deletions

View File

@ -247,10 +247,6 @@ static int tcc_relocate_ex(TCCState *s1, void *ptr, addr_t ptr_diff)
} }
relocate_plt(s1); relocate_plt(s1);
#ifdef _WIN64
*(void**)ptr = win64_add_function_table(s1);
#endif
for(i = 1; i < s1->nb_sections; i++) { for(i = 1; i < s1->nb_sections; i++) {
s = s1->sections[i]; s = s1->sections[i];
if (0 == (s->sh_flags & SHF_ALLOC)) if (0 == (s->sh_flags & SHF_ALLOC))
@ -267,6 +263,11 @@ static int tcc_relocate_ex(TCCState *s1, void *ptr, addr_t ptr_diff)
if (s->sh_flags & SHF_EXECINSTR) if (s->sh_flags & SHF_EXECINSTR)
set_pages_executable((char*)ptr + ptr_diff, length); set_pages_executable((char*)ptr + ptr_diff, length);
} }
#ifdef _WIN64
*(void**)mem = win64_add_function_table(s1);
#endif
return 0; return 0;
} }