Ну, я пытаюсь получить базовые адреса для 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
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-битными.
Других решений пока нет …