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

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

It has to work, otherwise GDB wouldn't:

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

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

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

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

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

c

macos

memory

ptrace

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