AntKrotov / oberon-07-compiler

Oberon-07 compiler for x64 (Windows, Linux), x86 (Windows, Linux, KolibriOS), MSP430x{1,2}xx, STM32 Cortex-M3
BSD 2-Clause "Simplified" License
61 stars 5 forks source link

PIE #22

Open galaxysite opened 10 months ago

galaxysite commented 10 months ago

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

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

AntKrotov commented 10 months ago

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

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

galaxysite commented 10 months ago

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

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'ом можно проверить более полно.

AntKrotov commented 10 months ago

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

galaxysite commented 10 months ago

Спасибо !