MH_EXECUTE in MH_DYLIB konvertieren (mach-o)

8

Das Problem:

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!

1 probiere

aus

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

%Vor%

Erstellen der iOS-Anwendung binary2

%Vor%

Wenn ich binary1 starte, bekomme ich:

Schritt 2

Sehen wir den Unterschied MH_EXECUTE vs MH_DYLIB

Vollbild

  • wie wir sehen können, ist der Hauptunterschied hier Dateityp: MH_EXECUTE vs MH_DYLIB

Ändern wir sie und führen binary1 erneut aus.
Nach der Änderung war das Ergebnis out of address space

Schritt 3

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

Schritt 4

Ich habe __PAGEZERO erfolgreich von Ladebefehlen entfernt. Jetzt sieht die Binärdatei wie dylib aus:
Vollbild

Aber beim Start binary1 erhalte ich BAD_ACCESS

%Vor%

Irgendeine Idee ???

    
unstable 01.05.2015, 13:56
quelle

1 Antwort

5

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.

    
John Coates 03.09.2017 04:11
quelle

Tags und Links