Я экспериментировал с чтением / записью в память другого процесса в C ++ на Os X.
Проблема, с которой я столкнулся, заключается в том, что я получаю указатель (например, server.dylib + 0x123AB), но я не могу найти способ динамического получения адреса памяти / базового адреса server.dylib в c ++. Существуют ли какие-либо методы, которые бы порекомендовали попробовать найти. Вероятно, это мой уровень мастерства, но я обнаружил, что попытка повозиться с памятью в OsX была нелегкой борьбой (вокруг очень мало документации).
Любой совет будет принят во внимание.
Ответ Мерлина несколько неточен. ASLR не предназначен для того, чтобы помешать вам получать адреса во время выполнения — он предназначен для того, чтобы вы не полагались на ФИКСИРОВАННЫЕ адреса (т.е. при внедрении кода). Если вы уже можете выполнять код, вы определенно можете получить адреса (черт возьми, GDB делает, почему вы не можете?)
DYLD предоставляет очень богатый API (и dyld_images.h), который позволяет вам легко получить список всех изображений, загруженных в адресное пространство процесса, либо внутри процесса, либо снаружи. Вы также можете получить «слайд», который является смещением ASLR. Это, однако, при условии, что вы уже запускаете код на этой машине — то есть он не будет работать при внедрении кода.
Частью безопасности OSX является метод, известный как ASLR (рандомизация расположения адресного пространства). Это гарантирует, что изображения загружаются в случайные области адресного пространства процесса, чтобы попытаться предотвратить использование вредоносных программ. Он присутствует как в процессах ядра, так и в пространстве пользователя.
Вы можете прочитать больше об этом ASLR Вот
Если вы выполните поиск в Google, вы сможете найти больше информации, относящейся к OSX, например: Эта статья
Если, как вы говорите, вы просто экспериментируете, запустите целевой процесс с помощью gdb, и вы сможете узнать адрес памяти dylib после его загрузки, который вы затем сможете использовать в своей тестовой программе.