Раздел llvm zerofill в сегменте, отличном от __DATA в MacOS Catalina - PullRequest
0 голосов
/ 29 мая 2020

У меня есть четвертая система, которая может производить самомодифицирующийся код.

В настоящее время я поместил место, где создаются четвертые слова и сборка в сегменте __DATA, и, следовательно, мне нужно отметить все Сегмент __DATA с разрешениями rwx.

В идеале я создаю новый сегмент, в котором будут размещены только четвертые определения / код.

Я надеялся, что смогу сделать что-то вроде

        .section __FORTHWORDS, __bss
        .zerofill __FORTHWORDS, _bss, user_defs_start, USER_DEFS_BYTES

но clang жалуется на

error: The usage of .zerofill is restricted to sections of ZEROFILL type. Use .zero or .space instead.

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

Итак, мой вопрос: можно ли написать сборку для создания нового сегмента с атрибут zerofill. что-то вроде этого:

        .section __FORTHWORDS, __bss, zerofill
        .zerofill __FORTHWORDS, __bss, user_defs_start, USER_DEFS_BYTES

Похоже, что в цепочке инструментов нет возможности указать это, поле для S_ZEROFILL в MCSectionMachO. cpp не заполняется. Есть ли способ (кроме модификации clang)?

...