Page 1 of 1

Поддержка Эльфов:ELF

Posted: Thu Aug 18, 2022 7:58 am
by Valery
В данном разделе планируется собирать информацию по поддержке формата ELF в Kolibry OS.
Для тех, кто не в курсе, ссылка на wiki: https://ru.wikipedia.org/wiki/Executab ... ble_Format
Более конкретно (i686):http://www.sco.com/developers/devspecs/abi386-4.pdf
Edit1:
Описание с полезными ссылками на OsDev: https://wiki.osdev.org/ELF

Поддерржка ELF на настоящий момент:
FASM позволяет создавать объектные (и не только) файлы в формате ELF.
Tcc (https://bellard.org/tcc/tcc-doc.html) позволяет создавать и использовать файлы в формате ELF (если при портировании эти функции не "убиты").

Идеи оригинальных программ:
(O1) cElf (по аналогии с CObj, только для файлов в формате ELF, создаваемыми программами Kolibry OS)
Минимум: список экспортируемых и импортируемых символов.
Edit2: Имеется версия 0.2: бета релиз C-варианта программы (Valery)

(O2) elfload.obj
Библиотека, содержащая функцию unsigned loadelf(const char *path, void *where_to_load, putsym_t ps). Которая позволяет загружать ELF файл, не содержащий внешних зависимостей, по адресу where_to_load, заполняя таблицу символов посредством ps(const void *adr, const char *name).
Edit1:
(O3) elf2spe переводящее подходящий объектный ELF-файл в формат SPE (насколько понимаю - почти что оригинальный для Kolibry OS)
(O4) elf2coff переводящее подходящий для библиотеки Kolibry OS объектный ELF-файл в формат COFF.

P.S.
Портировать objdump и objcopy будет "слишком жирно" ...

Re: Поддержка Эльфов:ELF

Posted: Thu Aug 18, 2022 10:58 am
by rgimad
Зачем еще третий (или уже четвертый) формат исполняемых файлов в колибри?

Re: Поддержка Эльфов:ELF

Posted: Thu Aug 18, 2022 11:04 am
by Doczom
а может тогда переведём библиотеки в формат PE, чтобы меньше форматов было, а то сейчас как-то многовато форматов

Re: Поддержка Эльфов:ELF

Posted: Thu Aug 18, 2022 11:20 am
by Valery
(1) Насколько я знаю, формат исполняемых файлов для Kolibry OS только один - binary.
Для библиотек пока используется coff, но планируется перейти на spe, который используется для драйверов (раньше был coff).
(2) Я ничего не говорил о поддержке ELF ядром Kolibry OS.
тогда переведём библиотеки в формат PE
Чем более мощный формат используется для библиотек/драйверов/в качестве исполняемого, тем большие издержки
- в смысле размера этого самого драйвера, библиотеки, исполняемого файла;
- в смысле размера кода в ядре для поддержки этого формата.
В этом плане PE ничем не лучше ELF.
Поэтому моё мнение - хорошо так , как есть(Edit: планируется перейти на spe).

Тогда зачем поддержка ELF?

Ответ: если поставить цель - разработка для Kolibry OS средствами самого дистрибутива, то ELF - это самый популярный формат объектных файлов. Поэтому частичная поддержка ELF или уже имеется (в качестве пообочного продукта портирования FASM, TCC, ...) или легко достижима (более полноценным портом выше названных программ).

Edit1 (краткое описание проделанной работы):
Я "дёрнулся" в направлении портирования readelf:
(1) GNU binutils либо надо портировать целиком, либо не браться за это дело;
(2) BSD elftoolchain выглядит явно привлекательнее ибо тащит дополнительно только три крупные папки (libdwarf , libelf , libelftc) и две мелочи (mk , common); пока вроде как успешно попытался портировать для MinGW libelf (чтобы оценить сложность задачи и проверить косяки на более близкой к BSD OS системе) - имелись проблемы со спецификой кода BSD, но вроде как преодолены; пока "исчерпан лимит времени";
Далее попытаюсь что-то сделать с нуля прямо для KolibriOS.
Найдены интересные проекты: xelfviewer , pyelftools , elfparser (http://elfparser.com/download.html единственный не находится так просто).
Edit2:
Базируясь на информацию OsDev создана программа cElf (ver.0.1).
Возвращаюсь на некоторое время снова к портированию readelf ...
Дополнительный материал: http://www.skyfree.org/linux/references/ELF_Format.pdf