Ich versuche, den Speicher eines Prozesses mit task_for_pid
/ vm_read
zu lesen.
In diesem Fall lese ich die ersten 2048 Bytes.
Das funktioniert, wenn ich die Basisadresse des Prozesses kenne (was ich mit gdb "info shared" herausfinden kann - in diesem Fall 0x10e448000
), aber wie finde ich die Basisadresse zur Laufzeit (ohne zu schauen es mit gdb)?
Beantworte meine eigene Frage. Ich konnte die Basisadresse mit mach_vm_region_recurse
wie unten erhalten. Der Versatz landet in vmoffset
. Wenn es einen anderen Weg gibt, der "richtiger" ist - zögere nicht zu kommentieren!
Da Sie current_task () aufrufen, gehe ich davon aus, dass Sie zur Laufzeit auf Ihren eigenen Prozess abzielen. Also sollte die Basisadresse, die Sie erwähnten, die dynamische Basisadresse sein, d. H. Statische Basisadresse + Bildrutsche, verursacht durch ASLR, richtig? Basierend auf dieser Annahme können Sie mit "Section and Segment Accessors" die statische Basisadresse Ihres Prozesses ermitteln und dann die dyld-Funktionen zum Abrufen des Bildobjekts verwenden. Hier ist ein Ausschnitt:
%Vor%Ich hoffe, es hilft!
Tags und Links macos