Skip to content

Commit 73ac5ea

Browse files
oleavrhsorbo
andcommitted
Fix early instrumentation on macOS 13 and iOS 16
Co-authored-by: Håvard Sørbø <havard@hsorbo.no>
1 parent 8e9aca4 commit 73ac5ea

4 files changed

Lines changed: 159 additions & 46 deletions

File tree

src/darwin/frida-helper-backend-glue.m

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#endif
2222
#include <gum/gum.h>
2323
#include <gum/gumdarwin.h>
24+
#include <mach-o/dyld_images.h>
2425
#include <mach-o/loader.h>
2526
#include <mach/exc.h>
2627
#include <mach/mach.h>
@@ -177,6 +178,11 @@
177178
mach_vm_address_t dyld_data;
178179

179180
GumAddress modern_entry_address;
181+
182+
/* V4+ */
183+
GumAddress info_ptr_address;
184+
185+
/* V3- */
180186
GumAddress dlopen_address;
181187
GumAddress cf_initialize_address;
182188
GumAddress info_address;
@@ -374,6 +380,7 @@
374380

375381
static void frida_spawn_instance_on_server_recv (void * context);
376382
static gboolean frida_spawn_instance_handle_breakpoint (FridaSpawnInstance * self, FridaBreakpoint * breakpoint, GumDarwinUnifiedThreadState * state);
383+
static gboolean frida_spawn_instance_handle_dyld_restart (FridaSpawnInstance * self);
377384
static gboolean frida_spawn_instance_handle_modinit (FridaSpawnInstance * self, GumDarwinUnifiedThreadState * state, GumAddress pc);
378385
static void frida_spawn_instance_receive_breakpoint_request (FridaSpawnInstance * self);
379386
static void frida_spawn_instance_send_breakpoint_response (FridaSpawnInstance * self);
@@ -1838,6 +1845,10 @@ static void frida_darwin_helper_backend_launch_using_sbs (NSString * identifier,
18381845
{
18391846
instance->modern_entry_address = modern_entry_address;
18401847
legacy_entry_address = 0;
1848+
1849+
instance->info_ptr_address = gum_darwin_module_resolve_symbol_address (dyld, "_gProcessInfo");
1850+
if (instance->info_ptr_address == 0)
1851+
goto dyld_probe_failed;
18411852
}
18421853
else
18431854
{
@@ -1903,6 +1914,13 @@ static void frida_darwin_helper_backend_launch_using_sbs (NSString * identifier,
19031914
frida_spawn_instance_set_nth_breakpoint (instance, i++, legacy_entry_address, FRIDA_BREAKPOINT_REPEAT_ALWAYS);
19041915
if (modern_entry_address != 0)
19051916
frida_spawn_instance_set_nth_breakpoint (instance, i++, modern_entry_address, FRIDA_BREAKPOINT_REPEAT_ALWAYS);
1917+
if (instance->dyld_flavor == FRIDA_DYLD_V4_PLUS)
1918+
{
1919+
GumAddress restart_with_dyld_in_cache = gum_darwin_module_resolve_symbol_address (dyld,
1920+
"__ZN5dyld422restartWithDyldInCacheEPKNS_10KernelArgsEPKN5dyld39MachOFileEPv");
1921+
if (restart_with_dyld_in_cache != 0)
1922+
frida_spawn_instance_set_nth_breakpoint (instance, i++, restart_with_dyld_in_cache, FRIDA_BREAKPOINT_REPEAT_NEVER);
1923+
}
19061924

19071925
kr = frida_set_debug_state (child_thread, &instance->breakpoint_debug_state, instance->cpu_type);
19081926
CHECK_MACH_RESULT (kr, ==, KERN_SUCCESS, "frida_set_debug_state");
@@ -2829,7 +2847,10 @@ static void frida_darwin_helper_backend_launch_using_sbs (NSString * identifier,
28292847
{
28302848
if (self->dyld_flavor == FRIDA_DYLD_V4_PLUS)
28312849
{
2832-
self->breakpoint_phase = FRIDA_BREAKPOINT_SET_LIBDYLD_INITIALIZE_CALLER_BREAKPOINT;
2850+
if (pc == self->modern_entry_address)
2851+
self->breakpoint_phase = FRIDA_BREAKPOINT_SET_LIBDYLD_INITIALIZE_CALLER_BREAKPOINT;
2852+
else
2853+
return frida_spawn_instance_handle_dyld_restart (self);
28332854
}
28342855
else
28352856
{
@@ -3054,6 +3075,49 @@ static void frida_darwin_helper_backend_launch_using_sbs (NSString * identifier,
30543075
}
30553076
}
30563077

3078+
static gboolean
3079+
frida_spawn_instance_handle_dyld_restart (FridaSpawnInstance * self)
3080+
{
3081+
gboolean handled = FALSE;
3082+
GumAddress * info_ptr;
3083+
struct dyld_all_image_infos * info = NULL;
3084+
GumDarwinModule * dyld = NULL;
3085+
GumAddress entry_address;
3086+
3087+
info_ptr = (GumAddress *) gum_darwin_read (self->task, self->info_ptr_address, sizeof (GumAddress), NULL);
3088+
if (info_ptr == NULL)
3089+
goto beach;
3090+
3091+
info = (struct dyld_all_image_infos *) gum_darwin_read (self->task, *info_ptr, sizeof (struct dyld_all_image_infos), NULL);
3092+
if (info == NULL)
3093+
goto beach;
3094+
3095+
dyld = gum_darwin_module_new_from_memory ("/usr/lib/dyld", self->task, GUM_ADDRESS (info->dyldImageLoadAddress),
3096+
GUM_DARWIN_MODULE_FLAGS_NONE, NULL);
3097+
if (dyld == NULL)
3098+
goto beach;
3099+
3100+
entry_address = gum_darwin_module_resolve_symbol_address (dyld, "__ZN5dyld44APIs19_libdyld_initializeEPKNS_16LibSystemHelpersE");
3101+
if (entry_address == 0)
3102+
goto beach;
3103+
3104+
self->modern_entry_address = entry_address;
3105+
3106+
g_object_unref (self->dyld);
3107+
self->dyld = g_steal_pointer (&dyld);
3108+
3109+
frida_spawn_instance_set_nth_breakpoint (self, 0, entry_address, FRIDA_BREAKPOINT_REPEAT_ALWAYS);
3110+
3111+
handled = TRUE;
3112+
3113+
beach:
3114+
g_clear_object (&dyld);
3115+
g_free (info);
3116+
g_free (info_ptr);
3117+
3118+
return handled;
3119+
}
3120+
30573121
static gboolean
30583122
frida_spawn_instance_handle_modinit (FridaSpawnInstance * self, GumDarwinUnifiedThreadState * state, GumAddress pc)
30593123
{

src/fruity/helpers/symbol-fetcher.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ frida_fetch_dyld_symbols (char * output_buffer, const void * dyld_load_address)
4949
const char * name = strings + sym->n_un.n_strx;
5050

5151
if (frida_str_contains (name, "libdyld_initialize") ||
52+
frida_str_contains (name, "restartWithDyldInCache") ||
53+
frida_str_equals (name, "_gProcessInfo") ||
5254
frida_str_contains (name, "launchWithClosure") ||
5355
frida_str_contains (name, "initializeMainExecutable") ||
5456
frida_str_contains (name, "registerThreadHelpers") ||
@@ -165,6 +167,9 @@ frida_append_uint64 (char ** output, uint64_t val)
165167
*cursor++ = nibble_to_hex_char[nibble];
166168
}
167169

170+
if (!found_first_nonzero)
171+
*cursor++ = '0';
172+
168173
*output = cursor;
169174
}
170175

src/fruity/injector.vala

Lines changed: 80 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ namespace Frida.Fruity.Injector {
146146
jit_page = yield lldb.allocate (page_size, "rx", cancellable);
147147
scratch_page = yield lldb.allocate (page_size, "rw", cancellable);
148148

149-
dyld_fields = yield lldb.get_apple_dyld_fields (cancellable);
149+
dyld_fields = yield lldb.get_apple_dyld_fields (ALLOW_CACHE, cancellable);
150150
libsystem_initialized = yield lldb.read_bool (dyld_fields.libsystem_initialized, cancellable);
151151
if (libsystem_initialized) {
152152
dyld_base = yield lldb.read_pointer (dyld_fields.dyld_load_address, cancellable);
@@ -837,14 +837,48 @@ namespace Frida.Fruity.Injector {
837837

838838
private async void ensure_libsystem_initialized_for_dyld_v4_and_above (uint64 libdyld_initialize,
839839
Cancellable? cancellable) throws GLib.Error {
840+
uint64? process_info_ptr = dyld_symbols["_gProcessInfo"];
841+
if (process_info_ptr == null)
842+
throw new Error.UNSUPPORTED ("Missing gProcessInfo");
843+
840844
LLDB.Breakpoint init_breakpoint = yield lldb.add_breakpoint (libdyld_initialize, cancellable);
841845

846+
LLDB.Breakpoint? restart_breakpoint = null;
847+
uint64? restart_with_dyld_in_cache = dyld_symbols["__ZN5dyld422restartWithDyldInCacheEPKNS_10KernelArgsEPKN5dyld39MachOFileEPv"];
848+
if (restart_with_dyld_in_cache != null)
849+
restart_breakpoint = yield lldb.add_breakpoint (restart_with_dyld_in_cache, cancellable);
850+
842851
var exception = yield lldb.continue_until_exception (cancellable);
843852

844853
LLDB.Breakpoint? hit_breakpoint = exception.breakpoint;
845854
if (hit_breakpoint == null)
846855
throw new Error.UNSUPPORTED ("Unexpected exception");
847856

857+
if (hit_breakpoint == restart_breakpoint) {
858+
uint64 process_info = yield lldb.read_pointer (process_info_ptr, cancellable);
859+
uint64 dyld_image_load_address = yield lldb.read_pointer (process_info + 0x20, cancellable);
860+
861+
var rebased_symbols = new Gee.HashMap<string, uint64?> ();
862+
foreach (var e in dyld_symbols.entries)
863+
rebased_symbols[e.key] = dyld_image_load_address + (e.value - dyld_base);
864+
865+
dyld_base = dyld_image_load_address;
866+
dyld_symbols = rebased_symbols;
867+
868+
yield restart_breakpoint.remove (cancellable);
869+
yield init_breakpoint.remove (cancellable);
870+
uint64 real_libdyld_initialize = dyld_symbols["__ZN5dyld44APIs19_libdyld_initializeEPKNS_16LibSystemHelpersE"];
871+
init_breakpoint = yield lldb.add_breakpoint (real_libdyld_initialize, cancellable);
872+
873+
exception = yield lldb.continue_until_exception (cancellable);
874+
875+
hit_breakpoint = exception.breakpoint;
876+
if (hit_breakpoint == null)
877+
throw new Error.UNSUPPORTED ("Unexpected exception");
878+
879+
dyld_fields = yield lldb.get_apple_dyld_fields (BYPASS_CACHE, cancellable);
880+
}
881+
848882
assert (hit_breakpoint == init_breakpoint);
849883
yield init_breakpoint.remove (cancellable);
850884

@@ -1133,53 +1167,57 @@ namespace Frida.Fruity.Injector {
11331167
private const uint8[] SYMBOL_FETCHER_CODE = {
11341168
0xff, 0xc3, 0x01, 0xd1, 0xfc, 0x6f, 0x01, 0xa9, 0xfa, 0x67, 0x02, 0xa9, 0xf8, 0x5f, 0x03, 0xa9, 0xf6, 0x57, 0x04,
11351169
0xa9, 0xf4, 0x4f, 0x05, 0xa9, 0xfd, 0x7b, 0x06, 0xa9, 0xfd, 0x83, 0x01, 0x91, 0xf4, 0x03, 0x01, 0xaa, 0xe0, 0x07,
1136-
0x00, 0xf9, 0x13, 0x00, 0x80, 0xd2, 0x19, 0x00, 0x80, 0xd2, 0x38, 0x80, 0x00, 0x91, 0x3a, 0x10, 0x40, 0xb9, 0x75,
1137-
0x1a, 0x00, 0x10, 0x1f, 0x20, 0x03, 0xd5, 0x56, 0x1a, 0x00, 0x70, 0x1f, 0x20, 0x03, 0xd5, 0xfa, 0x03, 0x00, 0x34,
1170+
0x00, 0xf9, 0x13, 0x00, 0x80, 0xd2, 0x19, 0x00, 0x80, 0xd2, 0x38, 0x80, 0x00, 0x91, 0x3a, 0x10, 0x40, 0xb9, 0xd5,
1171+
0x1c, 0x00, 0x30, 0x1f, 0x20, 0x03, 0xd5, 0xd6, 0x1c, 0x00, 0x10, 0x1f, 0x20, 0x03, 0xd5, 0xfa, 0x03, 0x00, 0x34,
11381172
0x08, 0x03, 0x40, 0xb9, 0x1f, 0x09, 0x00, 0x71, 0x80, 0x01, 0x00, 0x54, 0x1f, 0x2d, 0x00, 0x71, 0x80, 0x01, 0x00,
11391173
0x54, 0x1f, 0x65, 0x00, 0x71, 0x61, 0x01, 0x00, 0x54, 0x17, 0x23, 0x00, 0x91, 0xe0, 0x03, 0x17, 0xaa, 0xe1, 0x03,
1140-
0x15, 0xaa, 0x97, 0x00, 0x00, 0x94, 0x60, 0x01, 0x00, 0x34, 0x13, 0x0f, 0x40, 0xf9, 0x04, 0x00, 0x00, 0x14, 0xfc,
1174+
0x15, 0xaa, 0x9b, 0x00, 0x00, 0x94, 0x60, 0x01, 0x00, 0x34, 0x13, 0x0f, 0x40, 0xf9, 0x04, 0x00, 0x00, 0x14, 0xfc,
11411175
0x03, 0x18, 0xaa, 0x02, 0x00, 0x00, 0x14, 0xfb, 0x03, 0x18, 0xaa, 0x08, 0x07, 0x40, 0xb9, 0x18, 0x03, 0x08, 0x8b,
11421176
0x5a, 0x07, 0x00, 0x51, 0x9a, 0xfd, 0xff, 0x35, 0x09, 0x00, 0x00, 0x14, 0xe0, 0x03, 0x17, 0xaa, 0xe1, 0x03, 0x16,
1143-
0xaa, 0x89, 0x00, 0x00, 0x94, 0x00, 0xff, 0xff, 0x34, 0x08, 0x0f, 0x40, 0xf9, 0x09, 0x17, 0x40, 0xf9, 0x19, 0x01,
1177+
0xaa, 0x8d, 0x00, 0x00, 0x94, 0x00, 0xff, 0xff, 0x34, 0x08, 0x0f, 0x40, 0xf9, 0x09, 0x17, 0x40, 0xf9, 0x19, 0x01,
11441178
0x09, 0xcb, 0xf4, 0xff, 0xff, 0x17, 0x88, 0x02, 0x13, 0xcb, 0x28, 0x03, 0x08, 0x8b, 0x89, 0x0b, 0x40, 0xb9, 0x19,
1145-
0x01, 0x09, 0x8b, 0x89, 0x13, 0x40, 0xb9, 0x13, 0x01, 0x09, 0x8b, 0x78, 0x0b, 0x40, 0xb9, 0xd6, 0x15, 0x00, 0x10,
1146-
0x1f, 0x20, 0x03, 0xd5, 0xf7, 0x07, 0x40, 0xf9, 0x68, 0x0f, 0x40, 0xb9, 0x1f, 0x03, 0x08, 0x6b, 0x40, 0x09, 0x00,
1179+
0x01, 0x09, 0x8b, 0x89, 0x13, 0x40, 0xb9, 0x13, 0x01, 0x09, 0x8b, 0x78, 0x0b, 0x40, 0xb9, 0x36, 0x18, 0x00, 0x10,
1180+
0x1f, 0x20, 0x03, 0xd5, 0xf7, 0x07, 0x40, 0xf9, 0x68, 0x0f, 0x40, 0xb9, 0x1f, 0x03, 0x08, 0x6b, 0x00, 0x0b, 0x00,
11471181
0x54, 0xf5, 0x03, 0x18, 0x2a, 0xa8, 0xee, 0x7c, 0xd3, 0x28, 0x6b, 0x68, 0xb8, 0x7c, 0x02, 0x08, 0x8b, 0xe0, 0x03,
1148-
0x1c, 0xaa, 0x81, 0x0f, 0x00, 0x10, 0x1f, 0x20, 0x03, 0xd5, 0x4d, 0x00, 0x00, 0x94, 0x80, 0x04, 0x00, 0x37, 0xe0,
1149-
0x03, 0x1c, 0xaa, 0x61, 0x0f, 0x00, 0x70, 0x1f, 0x20, 0x03, 0xd5, 0x48, 0x00, 0x00, 0x94, 0xe0, 0x03, 0x00, 0x37,
1150-
0xe0, 0x03, 0x1c, 0xaa, 0x61, 0x0f, 0x00, 0x30, 0x1f, 0x20, 0x03, 0xd5, 0x43, 0x00, 0x00, 0x94, 0x40, 0x03, 0x00,
1151-
0x37, 0xe0, 0x03, 0x1c, 0xaa, 0x81, 0x0f, 0x00, 0x50, 0x1f, 0x20, 0x03, 0xd5, 0x3e, 0x00, 0x00, 0x94, 0xa0, 0x02,
1152-
0x00, 0x37, 0xe0, 0x03, 0x1c, 0xaa, 0xa1, 0x0f, 0x00, 0x10, 0x1f, 0x20, 0x03, 0xd5, 0x51, 0x00, 0x00, 0x94, 0x00,
1153-
0x02, 0x00, 0x37, 0xe0, 0x03, 0x1c, 0xaa, 0x41, 0x0f, 0x00, 0x10, 0x1f, 0x20, 0x03, 0xd5, 0x4c, 0x00, 0x00, 0x94,
1154-
0x60, 0x01, 0x00, 0x37, 0xe0, 0x03, 0x1c, 0xaa, 0xe1, 0x0e, 0x00, 0x10, 0x1f, 0x20, 0x03, 0xd5, 0x2f, 0x00, 0x00,
1155-
0x94, 0xc0, 0x00, 0x00, 0x37, 0xe0, 0x03, 0x1c, 0xaa, 0xc1, 0x0e, 0x00, 0x70, 0x1f, 0x20, 0x03, 0xd5, 0x2a, 0x00,
1156-
0x00, 0x94, 0x80, 0x03, 0x00, 0x34, 0x7a, 0x00, 0x00, 0x34, 0x48, 0x01, 0x80, 0x52, 0xe8, 0x16, 0x00, 0x38, 0x08,
1157-
0x00, 0x80, 0x52, 0x29, 0x13, 0x15, 0x8b, 0x29, 0x05, 0x40, 0xf9, 0x89, 0x02, 0x09, 0x8b, 0x8a, 0x07, 0x80, 0x52,
1158-
0x5f, 0x11, 0x00, 0x31, 0x60, 0x01, 0x00, 0x54, 0x2b, 0x25, 0xca, 0x9a, 0x6b, 0x0d, 0x40, 0x92, 0x7f, 0x01, 0x00,
1159-
0x71, 0xec, 0x07, 0x9f, 0x1a, 0x08, 0x01, 0x0c, 0x2a, 0x68, 0x00, 0x00, 0x36, 0xcb, 0x6a, 0x6b, 0x38, 0xeb, 0x16,
1160-
0x00, 0x38, 0x4a, 0x11, 0x00, 0x51, 0xf5, 0xff, 0xff, 0x17, 0x28, 0x01, 0x80, 0x52, 0xe8, 0x16, 0x00, 0x38, 0x88,
1161-
0x03, 0x40, 0x39, 0x68, 0x00, 0x00, 0x34, 0x9c, 0x07, 0x00, 0x91, 0xfc, 0xff, 0xff, 0x17, 0x5a, 0x07, 0x00, 0x11,
1162-
0x18, 0x07, 0x00, 0x11, 0xb5, 0xff, 0xff, 0x17, 0xe8, 0x07, 0x40, 0xf9, 0xe0, 0x02, 0x08, 0xcb, 0xff, 0x02, 0x00,
1163-
0x39, 0xfd, 0x7b, 0x46, 0xa9, 0xf4, 0x4f, 0x45, 0xa9, 0xf6, 0x57, 0x44, 0xa9, 0xf8, 0x5f, 0x43, 0xa9, 0xfa, 0x67,
1164-
0x42, 0xa9, 0xfc, 0x6f, 0x41, 0xa9, 0xff, 0xc3, 0x01, 0x91, 0xc0, 0x03, 0x5f, 0xd6, 0xf6, 0x57, 0xbd, 0xa9, 0xf4,
1165-
0x4f, 0x01, 0xa9, 0xfd, 0x7b, 0x02, 0xa9, 0xfd, 0x83, 0x00, 0x91, 0xf4, 0x03, 0x01, 0xaa, 0xf3, 0x03, 0x00, 0xaa,
1166-
0x35, 0x00, 0x40, 0x39, 0x68, 0x02, 0x40, 0x39, 0x28, 0x01, 0x00, 0x34, 0x1f, 0x01, 0x15, 0x6b, 0xa1, 0x00, 0x00,
1167-
0x54, 0xe0, 0x03, 0x13, 0xaa, 0xe1, 0x03, 0x14, 0xaa, 0x0b, 0x00, 0x00, 0x94, 0x80, 0x00, 0x00, 0x37, 0x73, 0x06,
1168-
0x00, 0x91, 0xf7, 0xff, 0xff, 0x17, 0x13, 0x00, 0x80, 0xd2, 0x7f, 0x02, 0x00, 0xf1, 0xe0, 0x07, 0x9f, 0x1a, 0xfd,
1169-
0x7b, 0x42, 0xa9, 0xf4, 0x4f, 0x41, 0xa9, 0xf6, 0x57, 0xc3, 0xa8, 0xc0, 0x03, 0x5f, 0xd6, 0x28, 0x00, 0x40, 0x39,
1170-
0xe8, 0x00, 0x00, 0x34, 0x21, 0x04, 0x00, 0x91, 0x09, 0x14, 0x40, 0x38, 0x3f, 0x01, 0x08, 0x6b, 0x60, 0xff, 0xff,
1171-
0x54, 0x00, 0x00, 0x80, 0x52, 0xc0, 0x03, 0x5f, 0xd6, 0x20, 0x00, 0x80, 0x52, 0xc0, 0x03, 0x5f, 0xd6, 0x08, 0x00,
1172-
0x40, 0x39, 0x29, 0x00, 0x40, 0x39, 0x1f, 0x01, 0x09, 0x6b, 0xc1, 0x00, 0x00, 0x54, 0x00, 0x04, 0x00, 0x91, 0x21,
1173-
0x04, 0x00, 0x91, 0x48, 0xff, 0xff, 0x35, 0x20, 0x00, 0x80, 0x52, 0xc0, 0x03, 0x5f, 0xd6, 0x00, 0x00, 0x80, 0x52,
1174-
0xc0, 0x03, 0x5f, 0xd6, 0x6c, 0x69, 0x62, 0x64, 0x79, 0x6c, 0x64, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c,
1175-
0x69, 0x7a, 0x65, 0x00, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6c, 0x6f, 0x73, 0x75,
1176-
0x72, 0x65, 0x00, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x4d, 0x61, 0x69, 0x6e, 0x45, 0x78,
1177-
0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x00, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x54, 0x68,
1178-
0x72, 0x65, 0x61, 0x64, 0x48, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x00, 0x5f, 0x64, 0x6c, 0x6f, 0x70, 0x65, 0x6e,
1179-
0x00, 0x5f, 0x73, 0x74, 0x72, 0x63, 0x6d, 0x70, 0x00, 0x64, 0x6f, 0x4d, 0x6f, 0x64, 0x49, 0x6e, 0x69, 0x74, 0x46,
1180-
0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x00, 0x64, 0x6f, 0x47, 0x65, 0x74, 0x44, 0x4f, 0x46, 0x53, 0x65,
1181-
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x00, 0x5f, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x00, 0x5f, 0x5f, 0x4c, 0x49, 0x4e,
1182-
0x4b, 0x45, 0x44, 0x49, 0x54, 0x00, 0x00, 0x00, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61,
1182+
0x1c, 0xaa, 0xc1, 0x10, 0x00, 0x10, 0x1f, 0x20, 0x03, 0xd5, 0x5b, 0x00, 0x00, 0x94, 0xc0, 0x05, 0x00, 0x37, 0xe0,
1183+
0x03, 0x1c, 0xaa, 0xa1, 0x10, 0x00, 0x70, 0x1f, 0x20, 0x03, 0xd5, 0x56, 0x00, 0x00, 0x94, 0x20, 0x05, 0x00, 0x37,
1184+
0xe0, 0x03, 0x1c, 0xaa, 0xc1, 0x10, 0x00, 0x50, 0x1f, 0x20, 0x03, 0xd5, 0x69, 0x00, 0x00, 0x94, 0x80, 0x04, 0x00,
1185+
0x37, 0xe0, 0x03, 0x1c, 0xaa, 0xa1, 0x10, 0x00, 0x10, 0x1f, 0x20, 0x03, 0xd5, 0x4c, 0x00, 0x00, 0x94, 0xe0, 0x03,
1186+
0x00, 0x37, 0xe0, 0x03, 0x1c, 0xaa, 0x81, 0x10, 0x00, 0x50, 0x1f, 0x20, 0x03, 0xd5, 0x47, 0x00, 0x00, 0x94, 0x40,
1187+
0x03, 0x00, 0x37, 0xe0, 0x03, 0x1c, 0xaa, 0xa1, 0x10, 0x00, 0x70, 0x1f, 0x20, 0x03, 0xd5, 0x42, 0x00, 0x00, 0x94,
1188+
0xa0, 0x02, 0x00, 0x37, 0xe0, 0x03, 0x1c, 0xaa, 0xc1, 0x10, 0x00, 0x30, 0x1f, 0x20, 0x03, 0xd5, 0x5d, 0x00, 0x00,
1189+
0x94, 0x00, 0x02, 0x00, 0x37, 0xe0, 0x03, 0x1c, 0xaa, 0x61, 0x10, 0x00, 0x30, 0x1f, 0x20, 0x03, 0xd5, 0x58, 0x00,
1190+
0x00, 0x94, 0x60, 0x01, 0x00, 0x37, 0xe0, 0x03, 0x1c, 0xaa, 0x01, 0x10, 0x00, 0x30, 0x1f, 0x20, 0x03, 0xd5, 0x33,
1191+
0x00, 0x00, 0x94, 0xc0, 0x00, 0x00, 0x37, 0xe0, 0x03, 0x1c, 0xaa, 0x01, 0x10, 0x00, 0x10, 0x1f, 0x20, 0x03, 0xd5,
1192+
0x2e, 0x00, 0x00, 0x94, 0x00, 0x04, 0x00, 0x34, 0x7a, 0x00, 0x00, 0x34, 0x48, 0x01, 0x80, 0x52, 0xe8, 0x16, 0x00,
1193+
0x38, 0x08, 0x00, 0x80, 0x52, 0x29, 0x13, 0x15, 0x8b, 0x29, 0x05, 0x40, 0xf9, 0x89, 0x02, 0x09, 0x8b, 0x8a, 0x07,
1194+
0x80, 0x52, 0x5f, 0x11, 0x00, 0x31, 0x80, 0x01, 0x00, 0x54, 0x2b, 0x25, 0xca, 0x9a, 0x6b, 0x0d, 0x00, 0x72, 0x0c,
1195+
0x01, 0x00, 0x12, 0x80, 0x19, 0x40, 0x7a, 0x08, 0x15, 0x9f, 0x1a, 0x88, 0x00, 0x00, 0x36, 0x6b, 0x1d, 0x40, 0x92,
1196+
0xcb, 0x6a, 0x6b, 0x38, 0xeb, 0x16, 0x00, 0x38, 0x4a, 0x11, 0x00, 0x51, 0xf4, 0xff, 0xff, 0x17, 0x68, 0x00, 0x00,
1197+
0x37, 0x08, 0x06, 0x80, 0x52, 0xe8, 0x16, 0x00, 0x38, 0x28, 0x01, 0x80, 0x52, 0xe8, 0x16, 0x00, 0x38, 0x88, 0x03,
1198+
0x40, 0x39, 0x68, 0x00, 0x00, 0x34, 0x9c, 0x07, 0x00, 0x91, 0xfc, 0xff, 0xff, 0x17, 0x5a, 0x07, 0x00, 0x11, 0x18,
1199+
0x07, 0x00, 0x11, 0xa7, 0xff, 0xff, 0x17, 0xe8, 0x07, 0x40, 0xf9, 0xe0, 0x02, 0x08, 0xcb, 0xff, 0x02, 0x00, 0x39,
1200+
0xfd, 0x7b, 0x46, 0xa9, 0xf4, 0x4f, 0x45, 0xa9, 0xf6, 0x57, 0x44, 0xa9, 0xf8, 0x5f, 0x43, 0xa9, 0xfa, 0x67, 0x42,
1201+
0xa9, 0xfc, 0x6f, 0x41, 0xa9, 0xff, 0xc3, 0x01, 0x91, 0xc0, 0x03, 0x5f, 0xd6, 0xf6, 0x57, 0xbd, 0xa9, 0xf4, 0x4f,
1202+
0x01, 0xa9, 0xfd, 0x7b, 0x02, 0xa9, 0xfd, 0x83, 0x00, 0x91, 0xf4, 0x03, 0x01, 0xaa, 0xf3, 0x03, 0x00, 0xaa, 0x35,
1203+
0x00, 0x40, 0x39, 0x68, 0x02, 0x40, 0x39, 0x28, 0x01, 0x00, 0x34, 0x1f, 0x01, 0x15, 0x6b, 0xa1, 0x00, 0x00, 0x54,
1204+
0xe0, 0x03, 0x13, 0xaa, 0xe1, 0x03, 0x14, 0xaa, 0x13, 0x00, 0x00, 0x94, 0x80, 0x00, 0x00, 0x37, 0x73, 0x06, 0x00,
1205+
0x91, 0xf7, 0xff, 0xff, 0x17, 0x13, 0x00, 0x80, 0xd2, 0x7f, 0x02, 0x00, 0xf1, 0xe0, 0x07, 0x9f, 0x1a, 0xfd, 0x7b,
1206+
0x42, 0xa9, 0xf4, 0x4f, 0x41, 0xa9, 0xf6, 0x57, 0xc3, 0xa8, 0xc0, 0x03, 0x5f, 0xd6, 0x08, 0x14, 0x40, 0x38, 0x29,
1207+
0x14, 0x40, 0x38, 0x1f, 0x01, 0x00, 0x71, 0x00, 0x11, 0x49, 0x7a, 0x80, 0xff, 0xff, 0x54, 0x1f, 0x01, 0x09, 0x6b,
1208+
0xe0, 0x17, 0x9f, 0x1a, 0xc0, 0x03, 0x5f, 0xd6, 0x28, 0x00, 0x40, 0x39, 0xa8, 0x00, 0x00, 0x34, 0x21, 0x04, 0x00,
1209+
0x91, 0x09, 0x14, 0x40, 0x38, 0x3f, 0x01, 0x08, 0x6b, 0x60, 0xff, 0xff, 0x54, 0x1f, 0x01, 0x00, 0x71, 0xe0, 0x17,
1210+
0x9f, 0x1a, 0xc0, 0x03, 0x5f, 0xd6, 0x6c, 0x69, 0x62, 0x64, 0x79, 0x6c, 0x64, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x69,
1211+
0x61, 0x6c, 0x69, 0x7a, 0x65, 0x00, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x57, 0x69, 0x74, 0x68, 0x44, 0x79,
1212+
0x6c, 0x64, 0x49, 0x6e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x00, 0x5f, 0x67, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
1213+
0x49, 0x6e, 0x66, 0x6f, 0x00, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6c, 0x6f, 0x73,
1214+
0x75, 0x72, 0x65, 0x00, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x4d, 0x61, 0x69, 0x6e, 0x45,
1215+
0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x00, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x54,
1216+
0x68, 0x72, 0x65, 0x61, 0x64, 0x48, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x00, 0x5f, 0x64, 0x6c, 0x6f, 0x70, 0x65,
1217+
0x6e, 0x00, 0x5f, 0x73, 0x74, 0x72, 0x63, 0x6d, 0x70, 0x00, 0x64, 0x6f, 0x4d, 0x6f, 0x64, 0x49, 0x6e, 0x69, 0x74,
1218+
0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x00, 0x64, 0x6f, 0x47, 0x65, 0x74, 0x44, 0x4f, 0x46, 0x53,
1219+
0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x00, 0x5f, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x00, 0x5f, 0x5f, 0x4c, 0x49,
1220+
0x4e, 0x4b, 0x45, 0x44, 0x49, 0x54, 0x00, 0x00, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61,
11831221
0x62, 0x63, 0x64, 0x65, 0x66
11841222
};
11851223

src/fruity/lldb.vala

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ namespace Frida.LLDB {
5656
CLOSED
5757
}
5858

59+
public enum CachePolicy {
60+
ALLOW_CACHE,
61+
BYPASS_CACHE
62+
}
63+
5964
private enum AckMode {
6065
SEND_ACKS,
6166
SKIP_ACKS
@@ -211,7 +216,7 @@ namespace Frida.LLDB {
211216

212217
var process = yield probe_target (cancellable);
213218

214-
var dyld_fields = yield get_apple_dyld_fields (cancellable);
219+
var dyld_fields = yield get_apple_dyld_fields (ALLOW_CACHE, cancellable);
215220
bool libsystem_initialized = yield read_bool (dyld_fields.libsystem_initialized, cancellable);
216221

217222
process.observed_state = libsystem_initialized
@@ -683,8 +688,9 @@ namespace Frida.LLDB {
683688
breakpoint_exception = null;
684689
}
685690

686-
public async AppleDyldFields get_apple_dyld_fields (Cancellable? cancellable = null) throws Error, IOError {
687-
if (cached_dyld_fields != null)
691+
public async AppleDyldFields get_apple_dyld_fields (CachePolicy cache_policy = ALLOW_CACHE, Cancellable? cancellable = null)
692+
throws Error, IOError {
693+
if (cache_policy == ALLOW_CACHE && cached_dyld_fields != null)
688694
return cached_dyld_fields;
689695

690696
var response = yield _query_simple ("qShlibInfoAddr", cancellable);

0 commit comments

Comments
 (0)