Наименьший размер допустимого исполняемого файла Mach-o

Я работаю над файловым итератором, который решает, является ли мачо-файл работоспособным или нет, и хотел бы добавить быструю проверку в соответствии с размером файла.

Кажется, что нет реальных ограничений на минимальный размер мачо, но есть ли нижний предел допустимого размера мачо.

Это означает, что файлы меньше этого размера, которые идентифицируются как мачо по префиксу 0xfeedface/0xfeedfacf, не могут быть выполнены).

Согласно структуре Macho, он должен содержать macho-заголовки и команды загрузки, которые могут указывать на дополнительные сегменты.

И если есть такой указанный предел, как я могу скомпилировать/создать такой файл, размер которого является пределом.

Я предполагаю, что такой файл будет содержать только один заголовок команды загрузки, указывающий на минимальный код ... он не будет связан ни с какой dylib, будет содержать статические данные, глобальные переменные и т. д., но когда я компилирую простую основную команду, которая возвращает 0 , он по-прежнему связан с /usr/lib/libSystem.B.dylib

грубая нижняя граница

спасибо


person Zohar81    schedule 15.04.2018    source источник
comment
Дубликат: stackoverflow.com/a/32659692/5329717 и stackoverflow.com/a/42399119/5329717 . Линкер по умолчанию будет связываться со стандартной библиотекой C.   -  person Kamil.S    schedule 15.04.2018
comment
@Kamil.S, это написано в вопросе Начиная с 10.10.5 Yosemite исполняемый файл должен иметь длину не менее 4096 байт, иначе он будет немедленно уничтожен. возможно, вы знаете, где в коде ядра я могу найти это условие?   -  person Zohar81    schedule 15.04.2018
comment
Ограничение я нашел сам опытным путем (убился идентичный исполняемый файл размером 4095 байт, дополненный нулями). Для начала проверьте это: github.com/opensource-apple/dyld /blob/мастер/источник/   -  person Kamil.S    schedule 15.04.2018
comment
Интересно, что Apple упростила проверки Mach-o в результате исправления джейлбрейка Pangu для iOS 8. Код загрузчика macho-o является общим для iOS и MacOS.   -  person Kamil.S    schedule 15.04.2018
comment
@siguza, и это потому, что он пытается прочитать PAGE_SIZE в методе error = vn_rdwr(UIO_READ, imgp->ip_vp, imgp->ip_vdata, PAGE_SIZE.., а файл меньше, поэтому он терпит неудачу, и мы переходим к bad. Правильно ?   -  person Zohar81    schedule 15.04.2018
comment
@ Zohar81 Да, точно.   -  person Siguza    schedule 15.04.2018


Ответы (1)


Кто-то написал именно это, tiny.s. Он работает для более ранних версий OSX:

https://gist.github.com/zliuva/1084476

person Olsonist    schedule 29.10.2020