Является ли сжатие после соединения на уровне инструкций на основе SIGILL безопасным и практичным в Linux ELF x86_64?Linux

Ответить
Anonymous
 Является ли сжатие после соединения на уровне инструкций на основе SIGILL безопасным и практичным в Linux ELF x86_64?

Сообщение Anonymous »

Я изучаю метод сжатия полностью связанных двоичных файлов ELF на уровне инструкций, а не сжатия двоичных файлов как данных. Идея вдохновлена текстовым кодированием Хаффмана, но применима к машинным инструкциям.
Идея:
  • Выполнить статический анализ полностью связанного двоичного файла ELF для обнаружения часто повторяющихся последовательностей инструкций (например, прологов/эпилогов функций, общих шаблонов доступа к памяти).
  • Заменить каждое вхождение такой последовательности однобайтовой недопустимой инструкцией (выбранной для надежно запускать SIGILL).
  • Встройте небольшой словарь, сопоставляющий эти коды операций с исходными последовательностями инструкций.
  • Во время выполнения установите обработчик SIGILL, который идентифицирует код операции, выполняет или эмулирует исходную последовательность инструкций и возобновляет выполнение.
Этот подход отличается от традиционных двоичных упаковщиков (например, UPX), потому что:
  • Сжимаются только последовательности инструкций.
  • Полная двоичная распаковка не требуется.
  • Распаковка происходит по требованию во время выполнения.
Мой вопрос:

Существуют ли ограничения на уровне ядра архитектуры, ABI или Linux (например, сигналы, память W^X, обработка исключений, таблицы очистки), которые сделали бы этот подход на основе SIGILL принципиально небезопасным или ненадежным на x86_64 двоичных файлах Linux ELF?
Я не спрашиваю об общих инструментах сжатия, эмуляции ЦП или поддержке нескольких архитектур — меня конкретно интересует жизнеспособность и безопасность этого метода расширения SIGILL после соединения.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ical-on-x8
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»