Программно добавить пустой раздел в файл iOS MachO?

#ios #c #gcc #linker #mach-o

#iOS #c #gcc #компоновщик #mach-o

Вопрос:

Кажется, что добавление -Wl,-sectcreate,__RESTRICT,__restrict,/dev/null Other Linker Flags добавит пустой раздел.

И в коде мы можем __attribute((used,section("segmentname,sectionname"))) объявить переменную или функцию.

Но как объявить пустой раздел в коде?

Ответ №1:

Вы уже обнаружили section(...) атрибут, но независимо от того, к чему вы его применяете (четный struct {} и char[0] ), он займет некоторое место и создаст непустой сегмент.

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

Включить этот блок кода где-нибудь за пределами функции:

 asm(".section __RESTRICT,__restrictn"
    "empty:n"
    ".no_dead_strip emptyn");
  

Это приведет:

  • добавьте действительно пустой (размер файла: 0) сегмент / раздел в ваш объектный файл.
  • добавьте empty символ в свою таблицу символов, но:
    • он будет закрытым (т. Е. Не связанным).
    • пока он не начинается с символа подчеркивания, вероятность его столкновения с чем-либо еще практически равна нулю.
  • работает во всех сборках i386, x86_64, arm и arm64.