Skip to content

Commit

Permalink
darwin-mapper: Initialize TLV before constructors
Browse files Browse the repository at this point in the history
Constructors may already access thread-local variables, hence we need to
initialize these first, before emitting callouts to initializers.
  • Loading branch information
jiska2342 authored and oleavr committed Aug 19, 2024
1 parent 3d935f8 commit b833cb9
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions gum/backend-darwin/gumdarwinmapper.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit b833cb9

Please sign in to comment.