oberon-07-compiler icon indicating copy to clipboard operation
oberon-07-compiler copied to clipboard

PIE

Open galaxysite opened this issue 1 year ago • 4 comments

Возможно ли сделать в Линуксе компиляцию в PIE ? Этого давно требуют пакетные менеджеры дистрибутивов. Иной формат исполняемых файлов ругает lintian.

И есть ли планы сделать графическую среду ? Портировать на Оберон https://github.com/mse-org/mseide-msegui или создать что-то своё наподобие.

galaxysite avatar Nov 02 '23 04:11 galaxysite

  1. Если PIE это Position Independent Executeble, то компилятор и так уже транслирует исключительно позиционно-независимый код как для ELF, так и для PE. Я не знаю, что при этом нужно изменить в структуре исполняемого файла (чтобы не ругался lintian), я с этим не разбирался. Но, тем не менее, Линукс может загружать эти исп. файлы в произвольный адрес и всё будет работать.

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

AntKrotov avatar Nov 02 '23 08:11 AntKrotov

Да, это он. Когда я запускаю (например) так, то получаю для Оберона:

first@my:~/oberon/oberon-07-compiler/bin$ readelf -a animation Заголовок ELF: Magic: 7f 45 4c 46 02 01 01 03 00 00 00 00 00 00 00 00 Класс: ELF64 Данные: дополнение до 2, от младшего к старшему Version: 1 (current) OS/ABI: UNIX - GNU Версия ABI: 0 Тип: EXEC (Исполняемый файл) Машина: Advanced Micro Devices X86-64 Версия: 0x1 Адрес точки входа: 0x40130d Начало заголовков программы: 64 (байт в файле) Начало заголовков раздела: 0 (байт в файле) Флаги: 0x0 Size of this header: 64 (bytes) Size of program headers: 56 (bytes) Number of program headers: 6 Size of section headers: 64 (bytes) Number of section headers: 0 Section header string table index: 0

А нужно:

first@my:~/mysites/smfg/soft/GORG64$ readelf -a gorg64_spkplay Заголовок ELF: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Класс: ELF64 Данные: дополнение до 2, от младшего к старшему Version: 1 (current) OS/ABI: UNIX - System V Версия ABI: 0 Тип: DYN (Position-Independent Executable file) Машина: Advanced Micro Devices X86-64 Версия: 0x1 Адрес точки входа: 0x1470 Начало заголовков программы: 64 (байт в файле) Начало заголовков раздела: 15944 (байт в файле) Флаги: 0x0 Size of this header: 64 (bytes) Size of program headers: 56 (bytes) Number of program headers: 13 Size of section headers: 64 (bytes) Number of section headers: 39 Section header string table index: 38

То есть сейчас видимо поддерживается только PIC, а нужно PIC+PIE. Тогда readelf укажет на динамическую загрузку. Ну и самим lintian'ом можно проверить более полно.

galaxysite avatar Nov 02 '23 08:11 galaxysite

Понятно. Если (когда) будет возможность, попробую сделать поддержку PIC+PIE.

AntKrotov avatar Nov 02 '23 08:11 AntKrotov

Спасибо !

galaxysite avatar Nov 02 '23 08:11 galaxysite