Ich habe 2 MH_EXECUTE iOS-Binärdateien (kompiliert, kein Quellcode).
Benennen Sie sie binary1
und binary2
.
Ich versuche zwischen ihnen zu wechseln, bevor UIApplicationMain
aufgerufen wird!
Ich mache das erfolgreich mit binary1
und einem dylib
. Also versuche ich MH_EXECUTE in MH_DYLIB umzuwandeln.
Schritt 1
Erstellen der iOS-Anwendung binary1
Erstellen der iOS-Anwendung binary2
Wenn ich binary1
starte, bekomme ich:
Sehen wir den Unterschied MH_EXECUTE vs MH_DYLIB
Ändern wir sie und führen binary1
erneut aus.
Nach der Änderung war das Ergebnis out of address space
Hier finden Sie Ladebefehle für Vollbild
* in dylib
gibt es NO __PAGEZERO
segment
* dylib
__TEXT
segment VM address
== 0 aber in binary2
== 0000000100000000
Also lasst sie auch patchen ... (gepatcht: __TEXT
, ___DATA
und __LINKEDIT
)
Nach dem Ausführen von binary1
erhalte ich malformed mach-o image: segment __PAGEZERO overlaps load commands
Ich habe __PAGEZERO
erfolgreich von Ladebefehlen entfernt. Jetzt sieht die Binärdatei wie dylib aus:
Vollbild
Aber beim Start binary1
erhalte ich BAD_ACCESS
Sie erhalten BAD_ACCESS
, weil Sie __PAGEZERO
entfernt haben und damit die Opcodes für die Neusortierung ungültig gemacht haben. Behalte __PAGEZERO, aber annulliere es. Ich konvertierte in ähnlicher Weise eine ausführbare Datei in eine gemeinsame Bibliothek und es wird auf iOS und MacOS geladen.