Я заметил, что при проверке заголовка Mach с использованием otool
в фреймворках Cocoa Touch никогда не устанавливался флаг PIE
, хотя я установил для обоих параметров «Создать позиционно-зависимый исполняемый файл» и «Создать позиционно-зависимый код» значение НЕТ сильный> в Xcode. Тем не менее, это вывод, который я получаю от otool
:
otool -hv framework_binary
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC_64 ARM64 ALL 0x00 DYLIB 16 1560 NOUNDEFS DYLDLINK TWOLEVEL NO_REEXPORTED_DYLIBS
Как видите, флага PIE
здесь нет. Однако при проверке двоичного файла приложения PIE
теперь присутствует:
otool -hv application_binary
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC_64 ARM64 ALL 0x00 EXECUTE 24 3088 NOUNDEFS DYLDLINK TWOLEVEL PIE
Кто-нибудь может это объяснить?
Я читал о многих людях, у которых были проблемы с загрузкой своего приложения в App Store, потому что платформа, используемая их приложением, не использовала позиционно-независимый код (проверьте здесь для примера). Это заставляет меня задаться вопросом, как я должен проверить, использует ли мой фреймворк позиционно-независимый код, когда otool
, кажется, никогда не сообщает о флаге PIE
для двоичных файлов фреймворка?! Он сообщает о них только для двоичных файлов приложений.
Это сбивает меня с толку. Я надеюсь, что кто-то может объяснить это...