Я пытаюсь получить базовый адрес загруженных dylibs в OSX

Ну, я пытаюсь получить базовые адреса для Loaded OSX Dylibs для запуска процессов во время выполнения, так как давно.

Я выгружал все подключенные Dylibs во время выполнения, используя dyld_all_image_infos после использования task_info, получил там имя и ImageLoadADDRESS, mach_header и plot_command.

Но я не могу получить Baseaddress на время выполнения ..

Все отлично работает, за исключением того, что я запутался в том, как получить фактический Baseaddress запрашиваемого изображения во время выполнения!
Также мой Магический номер, который я получил после получения mach_header с использованием моего imageLoadAddress, это «feedfacf». Разве это не должно быть «feedface»?

После поиска я обнаружил, что «fileoff» в «сегмент_команда» должен привести меня к разделу данных. Это тоже не работает.

Мой вывод выглядит великолепно, но когда я пытаюсь просмотреть эту область памяти в чит-движке, например, он пуст!

Мой вывод отладки:

mach object header
magic number	feedfacf
cputype		01000007 - x86_64
subcputype	00000003
filetype	00000006
ncmds		00000015
sizeofcmds	00000988
flags		00118085
Segment
File Off	45545f5f
DYLIB: client.dylib

1

Решение

vmaddr поле segment_command структура (или segment_command_64 для 64-битной OS X) адрес сегмента в виртуальной памяти.

Структура заголовка изображения mach-o (например, dylib) следующая:

| mach_header | load_command | load_command | … | load_command |

Количество структур load_command хранится в ncmds поле mach_header, Некоторые из них segment_command структуры, вы можете проверить это с cmd поле load_command, Если cmd является LC_SEGMENT или же LC_SEGMENT_64 для 64 бит — это segment_command а также segment_command_64 для 64 бит. Просто брось load_command к segment_command,

Обычно, mach_header хранится в первых байтах первого сегмента dylib. Так, info[i].imageLoadAddress это то, что вы ищете, если я правильно понимаю ваш вопрос.

Другое дело, вы упомянули о магических ценностях feedfacf а также feedface, На самом деле, feedface является MH_MAGIC, в то время как feedfacf является MH_MAGIC_64, Все современные MacBook, iMac и Mac Mini являются 64-битными.

0

Другие решения

Других решений пока нет …