diff --git a/gum/backend-darwin/gumdarwinmapper.c b/gum/backend-darwin/gumdarwinmapper.c index 3768a7da3..97081335b 100644 --- a/gum/backend-darwin/gumdarwinmapper.c +++ b/gum/backend-darwin/gumdarwinmapper.c @@ -1171,12 +1171,13 @@ gum_emit_runtime (GumDarwinMapper * self, (GumFoundDarwinBindFunc) gum_emit_resolve_if_needed, &ctx); gum_darwin_module_enumerate_lazy_binds (module, (GumFoundDarwinBindFunc) gum_emit_resolve_if_needed, &ctx); - gum_darwin_module_enumerate_init_pointers (module, - (GumFoundDarwinInitPointersFunc) gum_emit_init_calls, &ctx); if (tlv->num_descriptors != 0) gum_emit_tlv_init_code (&ctx); + gum_darwin_module_enumerate_init_pointers (module, + (GumFoundDarwinInitPointersFunc) gum_emit_init_calls, &ctx); + gum_x86_writer_put_add_reg_imm (&cw, GUM_X86_XSP, self->module->pointer_size); gum_x86_writer_put_pop_reg (&cw, GUM_X86_XBX); gum_x86_writer_put_pop_reg (&cw, GUM_X86_XBP); @@ -1713,14 +1714,15 @@ gum_emit_arm64_runtime (GumDarwinMapper * self, (GumFoundDarwinBindFunc) gum_emit_arm64_resolve_if_needed, &ctx); gum_darwin_module_enumerate_lazy_binds (module, (GumFoundDarwinBindFunc) gum_emit_arm64_resolve_if_needed, &ctx); + + if (tlv->num_descriptors != 0) + gum_emit_arm64_tlv_init_code (&ctx); + gum_darwin_module_enumerate_init_pointers (module, (GumFoundDarwinInitPointersFunc) gum_emit_arm64_init_pointer_calls, &ctx); gum_darwin_module_enumerate_init_offsets (module, (GumFoundDarwinInitOffsetsFunc) gum_emit_arm64_init_offset_calls, &ctx); - if (tlv->num_descriptors != 0) - gum_emit_arm64_tlv_init_code (&ctx); - gum_arm64_writer_put_pop_reg_reg (&aw, ARM64_REG_X21, ARM64_REG_X22); gum_arm64_writer_put_pop_reg_reg (&aw, ARM64_REG_X19, ARM64_REG_X20); gum_arm64_writer_put_pop_reg_reg (&aw, ARM64_REG_FP, ARM64_REG_LR);