Заголовок немного неправильно написан мной. Я имел в виду немного другое. Как люди и при помощи каких компиляторов пишут код на C++ для своих ОС ? Ведь наверное нужно чтобы создавался какой нибудь BIN файл без заголовков, только лишь с одним кодом, или какой нибудь OBJ ? Очень хочу знать как это. Скачал Open Watcom. Или посоветуйте чем лучше это делать? Спасибо, тема очень важная. Вот прямая ссылка на последнюю версию Open Watcom. Те кто хочет, может сам скачать и попробовать: http://downloads.openwatcom.org/ftp/open-watcom-c-win32-1.5.exe (~59 Mb)
Я сам еще не пробовал, но теоритически сработать должно 1. Можно использовать GRUB для загрузки твоего ядра. Он умеет загружать ELF-файлы (один из видов исполняемых в UNIX). Тогда для компиляции можно использовать gcc + встроенный asm, gcc + какой-либо ассемблер по вкусу. 2. Еще более теоритический вариант -- использовать MS VS 6.0. Компилируешь проект с ключом /FIXED -- чтобы не генерировались релокации и /BASE:база твоего ядра. Правда, остается вопрос, как ты будешь загружать ядро и передавать ему управление. Можно написать какой-то базовый загрузчик PE (не самый лучший вариант), можно вытащить код и данные в бинарник, предварительно объединив секции кода и данных -- опция /MERGE: (это проще). Второй вариант -- плод моего больного воображения. Но причин, по которым работать не будет, вроде, нет.
У меня была одна дурацкая идея: Компильнуть, потом дизассемблировать в файл LST, и ... Только вот проблема в том, что формат какой то свой представления. :-( Ну должны же быть форматы RAW в компиляторе. Я читал на форуме что вроде бы есть. Но сам в опциях не нашёл, хоть перерыл всё. Вот ещё способ. После компиляции получается OBJ-файл, вот если его обработать и создать свой файл. Но ведь нужно знать формат этого OBJ файла, а я не знаю. Mika0x65 Насчёт GCC. Сегодня залазил на официальный сайт, видел список откомпилированных файлов, но не нашёл под Windows.
собрать бинарник можно с помощью линкера ld.exe, входящего в пакет djgpp. Пробовал обычный линуксовый линкер, но не удалось найти среди его опции таких, которые позволяют собирать в бинарник. Если кто знает, будет интересно услышать. PS: А написать загрузчик PE лишним не будет.
в бинарник это как? ты это имеешь в виду: Код (Text): ld -Ttext 0x0 --oformat=binary -o ouput.bin input.o ?
Да дело не в загрузчике PE, а в том чтобы генерировался код без stub вначале, будь то DOS32Extender или TNT и так далее. Вот выход то как раз и состоит в том, чтобы создавать код линкером из OBJ Спасибо.
Iceberg Видимо, ld вполне годится для сборки экзешников в "своём" формате. В этом топике на meos.sysbin как раз есть скрипт и шаблон для линковки сишных обьектников в плоский формат для KolibriOS.
Имхо лучший выход - это загрузчик PE написаный на фасме. И сам код можно будет писать любым компилятором который может генерить бинарники для винды. Загрузчик PE это дело весьма простое, я от 320 байт (в скомпиленом виде) писал.
Скачал djgpp 2.04, но не нашёл там ld.exe, скажите где же его искать то? Может я что-то не понимаю... Может он теперь по другому называется? Что касается компиляторов которые создают PE код. Я если ты знаешь спрашиваю про OpenWatcom, но при помощи него получается файл для Windows всегда с приличной "шапкой". То есть stub большой. Ты отсеивал ненужную информацию? :-D Поясни пожалуйста, потому что это очень важно. Даже если я напишу просто Код (Text): void main(){ int x=0; }; EXE файл будет "весить" 22016 и в нём будет много ненужных мне данных. А при помощи чего делать ?
repne Когда я последний раз ставил Cygwin, был там ld.exe. В демо-версии BlitzMax он тоже есть. Называется LD.EXE. 553Кб.
Начал скачивать BlitzMax,а вот скачал Cygwin, инсталльнул (около 54 мб получилось), но не нашёл поиск LD.exe ))) Ура, в BlitzMax`е есть ld.exe.
Арррггх. Так и хочеться написать автору fasm`а , чтобы он начал писАть fcpp )) Flat C++, чтобы как и в fasm`е создавались bin-файлы. ЭЭЭЭЭххх.
repne А в чём собственно проблема? И на VC++ можно создать "bin" файл. Делаешь обычный PE, указывая линкеру объединить все секции и нужный адрес загрузки (с учётом отрезаемого заголовка). Затем отрезаешь заголовок и bin готов.
Это всё не то. У меня голова пухнет от количества информации перелопаченной сегодня. Нужно переварить всё это. Жду ответа от человека который говорил про использование любого компилятора создающего PE файл. Каким лучше то. Попробую VC.Net 2005.
Наткнулся в описании к OpenWatcom на такую строчку (выделена жирным): The Open Watcom Linker is capable of producing a number of executable file formats. The following lists these executable file formats. · DOS executable files · ELF executable files · executable files that run under FlashTek's DOS extender · executable files that run under Phar Lap's 386|DOS-Extender · executable files that run under CauseWay DOS extender, Tenberry Software's DOS/4G and DOS/4GW DOS extenders, and compatible products · NetWare Loadable Modules (NLMs) that run under Novell's NetWare operating system · OS/2 executable files including Dynamic Link Libraries · QNX executable files · 16-bit Windows (Win16) executable files including Dynamic Link Libraries · 32-bit Windows (Win32) executable files including Dynamic Link Libraries · raw binary images · Intel Hex files (Hex80, Hex86 and extended linear) Вот только чёрт возьми не написано как это реализовать. Какие параметры подставить. Я буду искать дальше, но если кто знает - поделитесь.