Чтение памяти другого процесса в OS X?

Матасано Чарген некоторое c время назад опубликовал хороший mac пост о переносе кода отладки macos на OS X, который включал ptrace в себя обучение чтению и osx записи памяти в другом процессе macosx (среди прочего).

It has to work, otherwise GDB wouldn't:

Оказывается, Apple ptrace в своей бесконечной мудрости c выпотрошила ptrace(). На справочной ptrace странице OS X перечислены c следующие коды запросов:

  • PT_ATTACH — выбрать процесс для отладки
  • PT_DENY_ATTACH — чтобы процессы могли остановить себя от отладки
    [...]

Нет ptrace упоминания о чтении или записи memory памяти или регистров. Это macos было бы обескураживающим, если c бы на странице руководства memory не упоминались также PT_GETREGS, PT_SETREGS, PT_GETFPREGS и c PT_SETFPREGS в разделе кодов ошибок. Итак, я mac проверил ptrace.h. Там я нашел:

  • PT_READ_I — прочитать слова инструкции
  • PT_READ_D — читать слова данных
  • PT_READ_U — чтобы прочитать данные области U, если вы достаточно взрослый, чтобы помнить, что такое область U
    [...]

Одна osx проблема решена. Я могу читать c и записывать память для точек macos останова. Но я все равно osx не могу получить доступ к mac регистрам, а мне нужно уметь macosx возиться с EIP.

c

macos

memory

ptrace

2022-08-02T20:23:13+00:00