Загрузка библиотек

Internal structure and you change requests/suggestions
  • Имхо, написать плагин к какой-нибудь программе (если имеется (толковая) документация и интерфейс стандартен) намного проще чем править ядро (о сложностях программирования в кёрнел-моуд, думаю, напоминать не надо).
    З.Ы. KFAR я привёл в качестве примера, т.к. я не знаю других программ для Клибри, которые поддерживают плагины.
  • zSea
  • Joaquin wrote:Имхо, написать плагин к какой-нибудь программе ... намного проще чем править ядро (о сложностях программирования в кёрнел-моуд, думаю, напоминать не надо).
    Не надо бояться кернел-моды -- ядро КОС правится очень легко и быстро.
    На полный цикл правки ядра с рестартом экспериментального кода (тестирую только на реальном железе) у меня в среднем уходит две-три минуты. В юзерспейсе трудно добиться более высокой производительности, особенно на ассемблере.

    Попробуй и убедись сам.
  • Я имел в виду, что программирование в 0-м кольце требует опыта и знаний больших, чем при написании пркиладных программ.
  • Все требует знаний. Юзерспейс - своих (большей частью алгоритмов и структур данных), Кернелспейс - своих (большей частью стандартов и особенностей железа)
  • Flood, sweet flood...
  • Начни флуд @ Обзови всех флудерастами.
  • Скопировал из чата:
    CleverMouse « Fri Nov 22, 2013 4:02 pm » "Загрузка PE уже есть в ядре, но для запуска приложений в PE надо решить ещё несколько вопросов." - пишет нам Serge из 2008 года
    [...]
    SoUrcerer « Fri Nov 22, 2013 6:41 pm » CleverMouse: интересно, каких. Кстати, переход на формат PE значительно упростил бы жизнь ЯВУшникам - проще было бы кросс-компилировать, проще делать библиотеки. Можно было бы впихнуть FreeType2 в минимальной сборке с менеджером шрифтов и юзать отовсюду.
    [...]
    Serge « Fri Nov 22, 2013 7:16 pm » CleverMouse: И к чему это ? Срочно понадобилось PE ?
    CleverMouse « Fri Nov 22, 2013 7:18 pm » Во-первых, меня очень раздражает C-- и Leency, учащий детей плохому. Leency ведь C-- не из-за качества языка выбрал, а только потому, что автор компилятора подсуетился и сделал поддержку заголовка. Действия по компиляции ЯВУ должны быть как можно проще, чтобы даже Leency не пугался, а переход на PE, несомненно, упрощает жизнь в этом месте.
    [...]
    CleverMouse « Fri Nov 22, 2013 7:20 pm » Во-вторых, меня очень раздражают макросы с 9 аргументами и необходимость включать в каждую программу, использующую динамические библиотеки, свой собственный код загрузчика
    [...]
    Serge « Fri Nov 22, 2013 7:23 pm » CleverMouse: А нужен полноценный PE или подойдёт усечённый вариант с таблицей иморта, как в Fplay и моих последних демках ?
    Unusual « Fri Nov 22, 2013 7:25 pm » CleverMouse: kolibrios на pe переходит?
    Serge « Fri Nov 22, 2013 7:26 pm » Unusual: Ядро пока нет, а я уже перешёл.
    Unusual « Fri Nov 22, 2013 7:27 pm » Serge: понятно
    CleverMouse « Fri Nov 22, 2013 7:27 pm » полноценный PE - это сложно
    Serge « Fri Nov 22, 2013 7:28 pm » Не чистый PE. А некий суррогат.
    CleverMouse « Fri Nov 22, 2013 7:28 pm » что именно там усечённое?
    CleverMouse « Fri Nov 22, 2013 7:28 pm » компиляторы его могут выдавать без дополнительных преобразований?
    Serge « Fri Nov 22, 2013 7:28 pm » Но длл линкуются обчные PE.
    Unusual « Fri Nov 22, 2013 7:32 pm » CleverMouse: ну если там PE http://miraculix.ru/ есть и псал то в колибри не сложно
    Serge « Fri Nov 22, 2013 7:32 pm » CleverMouse: gnu ld со скриптом
    Unusual « Fri Nov 22, 2013 7:32 pm » то есть разрабатывал один человек
    Serge « Fri Nov 22, 2013 7:33 pm » fasm со стандартным инклюдом из пакета. Это обычное приложение Колибри с таблицей импорта из PE.
    Serge « Fri Nov 22, 2013 7:34 pm » Потому требуется динамический линковщик, который встроен в libc.dll
    CleverMouse « Fri Nov 22, 2013 7:36 pm » с msvc и остальными компиляторами проблемы
    Unusual « Fri Nov 22, 2013 7:38 pm » msvc на фиг
    Serge « Fri Nov 22, 2013 7:38 pm » Одной из проблем было "где держать всю это прорву дллок". Как только Марат её решил
    Serge « Fri Nov 22, 2013 7:39 pm » так и появился прогресс
    Serge « Fri Nov 22, 2013 7:42 pm » CleverMouse: Вопрос насколько нужны остальные компоновщики ? C fasm и ld проблем нет.
    CleverMouse « Fri Nov 22, 2013 7:44 pm » libc.dll перемещает exe-шник на 0x400000?
    Serge « Fri Nov 22, 2013 7:45 pm » Есть вариант и с запуском чистого PE. Яро грузит в вершину юзерспейса образ и динамический линковщик. И передаёт управление на него.
    Serge « Fri Nov 22, 2013 7:46 pm » Зачем перемещать, image-base=0
    CleverMouse « Fri Nov 22, 2013 7:46 pm » судя по скрипту, нет. То есть писать в [0] по-прежнему спокойно можно?
    CleverMouse « Fri Nov 22, 2013 7:47 pm » что винда, что линух передают управление динамическому линковщику
    Serge « Fri Nov 22, 2013 7:48 pm » Заголовок затрёшь. .text 0x000000:
    CleverMouse « Fri Nov 22, 2013 7:49 pm » но PF не будет
    Serge « Fri Nov 22, 2013 7:51 pm » CleverMouse: Не будет, обчное же приложение Колибри, с необычными возможностями. Скоро SDK выложу с примерами. Фасмовские на свн уже есть.
  • CleverMouse « Пт ноя 22, 2013 9:28 pm » компиляторы его могут выдавать без дополнительных преобразований?
    Serge « Fri Nov 22, 2013 7:34 pm » Потому требуется динамический линковщик, который встроен в libc.dll
    Serge « Пт ноя 22, 2013 9:32 pm » CleverMouse: gnu ld со скриптом
    Так это и сейчас так можно. Так что, шило на мыло.
    CleverMouse « Пт ноя 22, 2013 9:20 pm » Во-вторых, меня очень раздражают макросы с 9 аргументами и необходимость включать в каждую программу, использующую динамические библиотеки, свой собственный код загрузчика
    Можно разработать другой интерфейс.
    Никто же не заставляет использовать именно такой способ.
    Можно вынести код загрузчика в отдельную библиотеку и импортировать по ординалу.
    Выносить код загрузки библиотек из приложений, разумеется, нужно, но не в ядро, а в системную user-mode библиотеку, которая будет грузиться автоматически, получать управление до основного приложения и всё настраивать. Например, это позволяет без проблем вызывать функции инициализации в библиотеках - которые, естественно, должны выполняться в user-mode - и существенно разгружает ядро от деталей, которые там не нужны.
    SoUrcerer « Пт ноя 22, 2013 8:41 pm » CleverMouse: интересно, каких. Кстати, переход на формат PE значительно упростил бы жизнь ЯВУшникам - проще было бы кросс-компилировать, проще делать библиотеки. Можно было бы впихнуть FreeType2 в минимальной сборке с менеджером шрифтов и юзать отовсюду.
    Это, конечно, всё удобно, но зачем подстраиваться под линкеры с компиляторами вместо того, чтобы ориентироваться в первую очередь на эту ОС?

    Если не хочется грузить вручную — сделать готовые модули(которые сами загрузят необходимое им) и просто их прилинковывать. Но это уже давным-давно можно было так делать.
  • Это, конечно, всё удобно, но зачем подстраиваться под линкеры с компиляторами вместо того, чтобы ориентироваться в первую очередь на эту ОС?
    Проще кодогенерация - проще портировать инструменты разработки. Так, у меня есть последний tcc, способный генерировать elf и pe из Колибри. Но он не умеет генерировать MENUET01 из Колибри - это еще предстоит перенести из старой версии порта.
  • SoUrcerer, ну вот и я про то.
    tcc не умеет — это проблемы tcc.
    Можно по-другому перефразировать:
    моему любимому компилятору\линкеру трудно генерировать программы для KolibriOS — давайте сделаем KolibriOS более удобной для него.
    Хотя можно просто взять ld со скриптом и получить нужный формат.
  • Ну, тогда напиши мне скрипт для ld, который позволит использовать сторонние динамические библиотеки без написания километровых обёрток. :) FreeType экспортирует несколько сотен функций.
  • Идея неплохая. В корень зрит, в идеале мне и правда нужен максимально простой компилятор, "чтобы даже я понял".

    Примеры компиляции:

    FASM.exe example.asm example.bin

    C--.exe example.c example.kex

    MSVC:
    cl /c /O2 /Ox /Os /GL /Gr /Oi /nologo /GS- /GR- kosilka.cpp kosFile.cpp kosSyst.cpp mcsmemm.cpp
    link /section:.bss,E /nologo /ltcg /map /entry:crtStartUp /subsystem:native /base:0 /fixed:no /nodefaultlib /merge:.data=.text /merge:.rdata=.text kosilka.obj kosFile.obj kosSyst.obj mcsmemm.obj
    fasm doexe2.asm kosilka
    + проблемы с разными версиями компилятора
    Из хаоса в космос
  • Leency
    Максимально простой компилятор, который даже ты уже начал понимать - это FASM. :)
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Who is online

    Users browsing this forum: No registered users and 7 guests