2016-12-12 12 views
2

Я пишу приложение, которое пытается прочитать некоторые данные из памяти другого процесса. Этот другой процесс загружает libmono.0.dylib, где должны находиться целевые данные (сборки).Чтение полей данных из загруженного dylib в другом процессе

С помощью некоторого кода на основе mach-o я могу выполнить итерацию загруженных dylib целевого процесса и получить базовый файл заголовка mach выше. Отсюда я могу получить к таблице символов, которая дает мне адрес функции, которая возвращает-структуру с соответствующими данными:

_mono_get_root_domain symbol

В моно исходном коде это выглядит как

MonoDomain* mono_get_root_domain (void) { return mono_root_domain; } 

Является ли мое предположение правильным, что адрес 0x18a934 содержит возвращенную структуру? Если да, то этот адрес относится к заголовку dylib (= header_addr + addr), или мне также нужно добавить слайд или просто использовать его как есть? То же самое можно сказать о каждом другом адресе, с которым я сталкиваюсь, когда я следую этому адресу?

ответ

0

Я пишу приложение, которое пытается прочитать некоторые данные из памяти другого процесса

Каждый процесс имеет свой собственный виртуальный объем памяти и защищен ядром. Висть, что dylib может использоваться совместно, если функция возвращает адрес, она будет отображаться на виртуальной карте памяти (VMMap) процесса, вызывающего эту функцию.

Для того, чтобы сопоставить адрес памяти целевого процесса в вашем собственном адресном пространстве процесса, вам нужен порт задачи цели. Вы имели обыкновение звонить task_for_pid, чтобы получить задачу процесса из своего pid, но поскольку OS X 10.10 (El Capitan) и введение System Integrity Protection (SIP), это уже невозможно.

Если данные находятся в загруженном dylib, просто загрузите dylib в свой собственный процесс с помощью dlopen и получите адрес функции с вызовом dlsym.

+0

Спасибо за ответ! У меня уже есть эта часть, у меня есть загруженный адрес заголовка и указатель на символ. Как вы можете видеть выше, я нашел указатель «внутри» дизассемблированного кода, теперь как его использовать? Если я прочитаю указатель dylib_base_address +, тогда я получаю просто случайные вещи. На какую область vm это указывает? – GooKSL

 Смежные вопросы

  • Нет связанных вопросов^_^