генерация плоского бинарника без системных функций
Модератор: Модераторы
генерация плоского бинарника без системных функций
Доброго времени суток.
Возникла необходимость в миниатюрном "реаниматоре". Вопрос не горит, но иной раз он был бы весьма кстати. К fpc я уже привык, так что ищу варианты. Если нет родной возможности компилировать в плоский бинарник - это решаемо, слинкую из объектников, но как отключить любую возможность использовать функции, связанные с системой - не нашел. Гуглёж средней въедливости результатов не дал, да и по ману глухо.
Есть мысль перегрузить модуль system, но хватит ли этого?
Задача не собственно реаниматор(коих готовых куча), а независимый от ОС паскальный расширяемый блок с загрузчиком.
ЗЫ Как-то давно начал я ковырять ассемблер. И как 99% из изучавших его не из-под палки решил написать "МегаКрутуюОС". Итог предсказуем, но загрузчик остался. Дальше дело не пошло, т.к. на чистом асме писать что-то относительно крупное(сложнее калькулятора) довольно тяжко, а с сями я не дружу.
Возникла необходимость в миниатюрном "реаниматоре". Вопрос не горит, но иной раз он был бы весьма кстати. К fpc я уже привык, так что ищу варианты. Если нет родной возможности компилировать в плоский бинарник - это решаемо, слинкую из объектников, но как отключить любую возможность использовать функции, связанные с системой - не нашел. Гуглёж средней въедливости результатов не дал, да и по ману глухо.
Есть мысль перегрузить модуль system, но хватит ли этого?
Задача не собственно реаниматор(коих готовых куча), а независимый от ОС паскальный расширяемый блок с загрузчиком.
ЗЫ Как-то давно начал я ковырять ассемблер. И как 99% из изучавших его не из-под палки решил написать "МегаКрутуюОС". Итог предсказуем, но загрузчик остался. Дальше дело не пошло, т.к. на чистом асме писать что-то относительно крупное(сложнее калькулятора) довольно тяжко, а с сями я не дружу.
у меня такое было на FPC и оно работало на VirtualBox, но я уже потерял этот проектик из-за давности времени
Что я помню так это то что компиляция кода который работает без ОС "прямо на железе" типа достигается вот этой опцией:
-Us : Compile a system unit
http://www.freepascal.org/docs-html/user/userap1.html
при использовании этой опции некоторые фичи компилятора будут станут недоступны
Что я помню так это то что компиляция кода который работает без ОС "прямо на железе" типа достигается вот этой опцией:
-Us : Compile a system unit
http://www.freepascal.org/docs-html/user/userap1.html
при использовании этой опции некоторые фичи компилятора будут станут недоступны
hinst
не совсем понимаю, как эта опция может помочь, но за направление спасибо
не совсем понимаю, как эта опция может помочь, но за направление спасибо
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
ger0strat, видимо, системные вызовы, по возможности, заменяются на их аналоги из BIOS-а.
Лекс Айрин биос не имеет функций для работы в защищенном режиме. в общем протестирую - отпишусь
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
ger0strat, Почему бы это? Если Вы переключаете в защищенный режим, то это Ваша задача сохранить прерывания BIOS в Глобальной Дескрипторной Таблице, до переключения. Если не хотите, то придется писать собственные драйвера.
-
Kemet
- постоялец
- Сообщения: 241
- Зарегистрирован: 10.02.2010 18:28:32
- Откуда: Временно оккупированная территория
- Контактная информация:
ger0strat, посмотри на Free Pascal Operating System
Но вообще это дело более чем бесполезное
Но вообще это дело более чем бесполезное
Лекс Айрин,
биос в 16-битном коде(по крайней мере без наворотов), разве нет? я крутым знатоком не являюсь, но дескрипторы 32-битные[upd: ну если система не 64 конечно] вроде как. хотя.. короче ушел курить мануал.
а отключение RTL оказалось проще, -n для отключения дефолтного конфига и создать system.pas и fpintres.pas
притом в первом пришлось объявить тип HRESULT, который, как я понял, есть нативное целое.
второй пустой.
не исключено, что я что-то не то творю, но пока связку не тестировал. в любом случае загрузчик сначала под ext2 перепилю
биос в 16-битном коде(по крайней мере без наворотов), разве нет? я крутым знатоком не являюсь, но дескрипторы 32-битные[upd: ну если система не 64 конечно] вроде как. хотя.. короче ушел курить мануал.
а отключение RTL оказалось проще, -n для отключения дефолтного конфига и создать system.pas и fpintres.pas
притом в первом пришлось объявить тип HRESULT, который, как я понял, есть нативное целое.
второй пустой.
не исключено, что я что-то не то творю, но пока связку не тестировал. в любом случае загрузчик сначала под ext2 перепилю
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
ger0strat, почитайте документацию по процессорам Интел. Да, система 32х разрядная, но...
1)Никто не запрещает Вам создать 32битный сегмент кода. и наложить его на "реальное" пространство в пределах
2)Существует стандартная возможность перевести процессор в защищенный режим.
ЗЫ: Я исхожу из того, что ОС у Вас еще нет и рабочее окружение вы создаете сами.
1)Никто не запрещает Вам создать 32битный сегмент кода. и наложить его на "реальное" пространство в пределах
2)Существует стандартная возможность перевести процессор в защищенный режим.
ЗЫ: Я исхожу из того, что ОС у Вас еще нет и рабочее окружение вы создаете сами.
Лекс Айрин
я с чтения документации собственно и начал
1) первый мегабайт я и отображал на те же адреса.
2) не понял смысл фразы. а есть еще и нестандартные сбособы?
ОС нет и не предвидится. суть в анализе и редактировании файловой системы.
сбило с толку что в реальном режиме адрес сегмента добавляется со смещением, а в защищенном без. вроде выглядит реализуемо, но таки берут сомнения, поверю когда протестирую
навскидку геморрой с трансляцией вектора прерываний сопоставим с работой с видеопамятью и дисками через порты
я с чтения документации собственно и начал
1) первый мегабайт я и отображал на те же адреса.
2) не понял смысл фразы. а есть еще и нестандартные сбособы?
ОС нет и не предвидится. суть в анализе и редактировании файловой системы.
сбило с толку что в реальном режиме адрес сегмента добавляется со смещением, а в защищенном без. вроде выглядит реализуемо, но таки берут сомнения, поверю когда протестирую
навскидку геморрой с трансляцией вектора прерываний сопоставим с работой с видеопамятью и дисками через порты
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
ger0strat, есть очень большое количество доступной документации по процессорам и их программированию... правда на английском
На сайте Intel. Вот там этот способ и описан.
Парни, вы к какой-то абстракции в обсуждении скатились, не имеющей отношения к первоначальному вопросу. 
Лучше, наверное, стоит задуматься, что останется от самого языка pascal, если его лишить взаимодействия с операционной системой.
Итак, - модуля system нет. Вас это не остановит? Да? Ну так - начинаем подсчет: менеджера памяти - нет, операций I/O - нет, еще много его нет. Нет менеджера памяти - нет типов данных, получающих автоматическое размещение от компилятора. Нет строк, нет массивов (любых) и операций с ними, нет половины математики, фактически нет работы с указателями - ага, на что указывать, если ничего невозможно разместить то?. Стоит крепко задуматься над тем, что же в результате осталось. А в результате осталось обрамление над ассемблерным кодом.
Достигаемое в весьма извращенной форме. Imho, языки, у которых библиотеки глубоко интегрированы в саму алгоритмику, для написания кода, работающего без операционной системы, не пригодны. Либо придется написать этот самый имитатор OS - в виде переделанных модулей system и остальных библиотек, переработанного компилятора и т.д. - т.е. проблема не только в том, что компилятор fpc давно уже не умеет генерить код, привязанный на статический адрес запуска, а куда глубже.
Когда-то очень давно у меня был такой компьютер MS1502. PCjr то есть. Без операционной системы. И мне очень хотелось запускать на ней программы, созданные на Turbo Pascal. COM-файлы тогда компилятор генерить мог.
Ну так, если в сгенерированном коде, написанном с некоторыми оговорками на Cи, достаточно было забить NOPами вызовы INT 21h, и программка работала без ОС, с турбо-паскалем такой номер не проходил. Даже на файлах, содержащих заглушку вместо модуля system.
Лучше, наверное, стоит задуматься, что останется от самого языка pascal, если его лишить взаимодействия с операционной системой.
Итак, - модуля system нет. Вас это не остановит? Да? Ну так - начинаем подсчет: менеджера памяти - нет, операций I/O - нет, еще много его нет. Нет менеджера памяти - нет типов данных, получающих автоматическое размещение от компилятора. Нет строк, нет массивов (любых) и операций с ними, нет половины математики, фактически нет работы с указателями - ага, на что указывать, если ничего невозможно разместить то?. Стоит крепко задуматься над тем, что же в результате осталось. А в результате осталось обрамление над ассемблерным кодом.
Когда-то очень давно у меня был такой компьютер MS1502. PCjr то есть. Без операционной системы. И мне очень хотелось запускать на ней программы, созданные на Turbo Pascal. COM-файлы тогда компилятор генерить мог.
SSerge
позволю себе не согласиться. достаточно посмотреть на сам родной system и входящие в него *.inc, например i386.inc, чтобы увидеть, что там те же зайцы на ассемблере, только в профиль.
менеджер памяти? ставим стек номеров страниц(а если охота побыстрее, то +bitmap занятости страниц). для более мелких объемов можно портировать родной менеджер.
io? видеобуфер отображен в память. клавиатура стандартна и прекрасно работает через порты. ata-устройства тоже на портах без проблем. с sata и usb пока не разбирался, возможны проблемы.
очевидно вы не поняли, полноценная ОС - дело не нашего с вами уровня, а вот без "имитатора" все равно не обойтись. это решено еще до начала работы.
я не знаю, что у вас там работало, но это издевательство над программой.
работать это будет только если программа и без того не использует досовский инт, иначе параметры в регистры переданы, прерывание не вызвано и мы радостно забираем как результат вызова наши же параметры. да, не везде, но меньшим извратом оно от этого не становится
позволю себе не согласиться. достаточно посмотреть на сам родной system и входящие в него *.inc, например i386.inc, чтобы увидеть, что там те же зайцы на ассемблере, только в профиль.
менеджер памяти? ставим стек номеров страниц(а если охота побыстрее, то +bitmap занятости страниц). для более мелких объемов можно портировать родной менеджер.
io? видеобуфер отображен в память. клавиатура стандартна и прекрасно работает через порты. ata-устройства тоже на портах без проблем. с sata и usb пока не разбирался, возможны проблемы.
очевидно вы не поняли, полноценная ОС - дело не нашего с вами уровня, а вот без "имитатора" все равно не обойтись. это решено еще до начала работы.
достаточно было забить NOPами вызовы INT 21h
я не знаю, что у вас там работало, но это издевательство над программой.
работать это будет только если программа и без того не использует досовский инт, иначе параметры в регистры переданы, прерывание не вызвано и мы радостно забираем как результат вызова наши же параметры. да, не везде, но меньшим извратом оно от этого не становится
Последний раз редактировалось ger0strat 11.10.2014 12:29:29, всего редактировалось 1 раз.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
SSerge писал(а):Лучше, наверное, стоит задуматься, что останется от самого языка pascal, если его лишить взаимодействия с операционной системой.
Ни один язык (кроме ассемблера) не предназначен для написание ОС. Однако почти все ОС написаны на ЯВУ. Да, с ассемблерными вставками в библиотеках поддержки. Но этот путь (по крайней мере пока) интереснее процессоров заточенных под ЯВУ.
Человек хочет знать как программировать под "голым" БИОСом. Почему бы и нет? Я тоже хочу.
Можно сделать всё! Но какой ценой? В какие сроки?
Я всё это уже прошёл.
Зря вы думаете что обойдётесь без ОС. Менеджер памяти вам понадобится. Так как со стационарной дальше 1-2х функций не уедешь Есть ведь целый раздел программирвования структуры данных и алгоритмы на них.
Понадобиться не только менеджер памяти, но ввод и вывод. Вы же команды будете вводить. И не только понадобятся таймеры и часы. А также процессы так как надо будет иметь возможность прервать выполнение программы. Нужно будет детективировать зависание и тд. А зависания будут, так как будут ошибки как в вашем коде так и в железе.
И это только верхушка айсберга.
И не только. И драйвера для видео и жестких дисков и для материнок и процессоров, компортов вам потребуются.
Это в эмуляторе всё просто, а на реальном железе с ихними выкрутасами кроме как писать под каждое устройство и конфигурацию свой драйвер нереально.
Так что берите готовую ОС с минимальной сборкой и делайте свой реаниматор поверх. Linux живёт только за то что Intel в него вложила не мала кода для поддержания своих и чужих устройств.
И ассмеблер знаю. И писать больше и сложные программы на ассмеблере можно. Просто у вас не было хорошего учебника. И вы так не научились писать функции и работать со структурами данных. А это ведь основы программирования! Но писать на ассемблере большой проект я не буду. Просто на языках высокого уровня это удобнее.
С Си у меня тоже не сложилось. Но гораздо проще делать как делают все в том же KolibryOS. Я имею в виду собирать всё из готовых блоков прикручивая, то одно то другое.
Исходник на Си компилируют в объектный файл и переводишь заголовочные файлы и подключаешь к своему проекту.
Я всё это уже прошёл.
Зря вы думаете что обойдётесь без ОС. Менеджер памяти вам понадобится. Так как со стационарной дальше 1-2х функций не уедешь Есть ведь целый раздел программирвования структуры данных и алгоритмы на них.
Понадобиться не только менеджер памяти, но ввод и вывод. Вы же команды будете вводить. И не только понадобятся таймеры и часы. А также процессы так как надо будет иметь возможность прервать выполнение программы. Нужно будет детективировать зависание и тд. А зависания будут, так как будут ошибки как в вашем коде так и в железе.
И это только верхушка айсберга.
И не только. И драйвера для видео и жестких дисков и для материнок и процессоров, компортов вам потребуются.
Это в эмуляторе всё просто, а на реальном железе с ихними выкрутасами кроме как писать под каждое устройство и конфигурацию свой драйвер нереально.
Так что берите готовую ОС с минимальной сборкой и делайте свой реаниматор поверх. Linux живёт только за то что Intel в него вложила не мала кода для поддержания своих и чужих устройств.
И ассмеблер знаю. И писать больше и сложные программы на ассмеблере можно. Просто у вас не было хорошего учебника. И вы так не научились писать функции и работать со структурами данных. А это ведь основы программирования! Но писать на ассемблере большой проект я не буду. Просто на языках высокого уровня это удобнее.
С Си у меня тоже не сложилось. Но гораздо проще делать как делают все в том же KolibryOS. Я имею в виду собирать всё из готовых блоков прикручивая, то одно то другое.
Исходник на Си компилируют в объектный файл и переводишь заголовочные файлы и подключаешь к своему проекту.
