|
0 / 0 / 0
Регистрация: 16.05.2009
Сообщений: 11
|
|
Компилирование С++ кода в бинарный16.05.2009, 12:50. Показов 5120. Ответов 14
Метки нет (Все метки)
Подскажите пожалуйста как откомпилировать С++ код (несколько файлов) просто в один кусок бинарного кода по x86 процессоры без указания операционной системы на которой код будет работать.
0
|
|
| 16.05.2009, 12:50 | |
|
Ответы с готовыми решениями:
14
Компилирование С++ кода в бинарный Резидент, который при нажатии комбинации клавиш выводит на экран сообщение и выгружается из памяти Объяснение кода перевода с 10 на бинарный и с бинарного на 10 |
|
MCSD: APP BUILDER
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
|
|
| 16.05.2009, 12:55 | |
|
1. откомпилировать в объектный файл, без линковки
2. объединить объкетники в один файл копированием в бинарном режиме (например в Windows так copy /b 1.obj + 2.obj + 3.obj)
0
|
|
|
|
|
| 16.05.2009, 13:06 | |
|
sopot
Такое сделать в общем-то нельзя, ибо форматы кодовский файлов, например, на виндах и линухе не совпадают. Либо тебе нужно получить объектный файл для каждого исходника, а затем вырезать из него секцию с кодом (как это делать под виндами - не знаю). В итоге у тебя получится массив байтов, которые есть просто код. При этом дальше с этим кодом ты почти ничего не сможешь сделать, т.к. все обращения к глобальным переменным и функциям у тебя будут смотреть в пустоту. К тому же код Си++ из-под одного компилятора в общем случае не линкуется с кодом из-под другого компилятора Riffi пункт 2 заведомо делать нельзя, т.к. файл .obj - это не просто набор кода, это файл, описаный по некотроым правилам, который включает в себя помимо кода кучу дополнительной информации
0
|
|
|
MCSD: APP BUILDER
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
|
|
| 16.05.2009, 13:35 | |
|
Evg,
пункт 2 заведомо делать нельзя я в курсе. но поскольку ему нужен мусор, по пожалуйста ![]() Добавлено через 1 минуту 31 секунду ps. У тебя со зрением плохо, или не знаешь как тыкнуть в "обратиться по нику"?
0
|
|
|
0 / 0 / 0
Регистрация: 16.05.2009
Сообщений: 11
|
|
| 16.05.2009, 14:01 [ТС] | |
|
Ну не то, чтобы мне нужен был мусор.
Цель в том, чтобы получить код работающий на x86 платформе (типа PC104 формата) на которой не установлено операционной системы. Соответственно требуется получить просто бинарный код. В общем я примерно понял, что как вариант нужно использовать компилятор, чтобы скомпилировать исходники в бинарики, а потом их объединять. Посмотрю опции линковщиков на предмет сборки объектных файлов не под конкретную ОС, а без нее.
0
|
|
|
|
||||||||||||
| 16.05.2009, 14:21 | ||||||||||||
|
Если твой изначальный исходник типа
Код типа
0
|
||||||||||||
|
0 / 0 / 0
Регистрация: 16.05.2009
Сообщений: 11
|
|
| 16.05.2009, 14:41 [ТС] | |
|
Вот для примера (IAR Embedded Workbench).
На выходе получается бинарик работающий без ОС. Поддерживает кучу платформ, в том числе различные микроконтроллеры и процессоры. К сожалению х86 не поддерживается. А мне нужно собрать не маленький проект на с++ под х86.
0
|
|
|
|
|
| 16.05.2009, 14:46 | |
|
Можешь на словах объяснить, что за хрень и что делает? А то всё это читать и вникать желания нет.
Правда это всё для embedded систем, т.е. для систем, где ОС как таковой и нету. Я ничего не читал, но подозреваю, что получается некий статический бинарник, в котором нет никаких обращений к ОС. Либо они есть, но через специальные механизмы (на них должна быть спецификация и рализация на каждую платформу). Т.е. если ты хочешь, чтобы это хозяйство работаело под intel, то тебе нужно иметь некую среду, внутри которой запустится этот бинарник. Это всё лишь мой предположение
0
|
|
|
0 / 0 / 0
Регистрация: 16.05.2009
Сообщений: 11
|
|
| 16.05.2009, 15:22 [ТС] | |
|
Для embedded точно. Но такие системы строятся в том числе и на основе любого процессора (есть они на Intel, AMD, и т.д.) и под каждую такую систему как правило есть ОС: Windows, Linux и т.д. (на всех платформах с процессорами на ARM ядрах есть точно). Соответственно если проект под одну из осей, то вопросов нет - под Windows есть Visual Studio, под Linux есть gcc. Мой проект в силу специфики должен работать без использования стороннего кода и соответственно без ОС. Платформа представляет собой по сути обычный PC: та же архитектура процессора, память ddr, шина pci и т.д. Только она намного менее расширяема и более компактна.
IAR на выходе дает бинарный код который запускается на заданном процессоре и содержит обращения только к самому коду и включенным в него статическим библиотекам. Код запускается по вектору RESET процессора. В принципе иаровский линковщик и весь проект можно настроить так, чтобы код запускался и под Windows, но не в этом суть. Мой код будет начинать работу с того места где начинает работу загрузчик ОС (если рассматривать стандартный РС) и который никакую ОС не пользует по определению. Я конечно могу написать все на асме, но проект не маленький и в качестве языка однозначно выбран с++. Вот и встал вопрос: чем такое сделать.
0
|
|
|
|
|
| 16.05.2009, 15:54 | |
|
Видимо я не совсем понимаю суть. Программа не может работать вне "ОС". По ОС я понимаю не просто ОС в общем понимании, а некотороую среду, внутри которой работает программа к которой непрерывно обращается. Т.е. записать что-то в файл программа не может по определению - для этого нужно обращение к ОС. Либо какое-нибудь аппаратное прерывание или обращение по каким-то адресам, на которые отмапированы порты ввода-вывода или на которые назначены специфические операции. Насколько я понимаю, в данном случае мы это и имеем.
А можешь написать какую-нибудь конкретную короткую программу. Например, сложить числа 2 и 3 и выдать результат на экран (или что там эта штука умеет делать). Т.е. в итоге тебе нужно на Си++ написать типа консольное приложение и слинковать его статически. При этом твоё приложение не должно содержать никаких обращений к библиотекам, не должно содержать высокоуровневых конструкций Си++ типа new (т.к. в конечном итоге оно работает через библиотечный malloc). Если работаешь под линухом, то можно сделать нормальный код, запустив ручками линкер, подстраховавшись при этом от того, что подключатся какие-либо библиотеки. Но вот точки взаимодействия с средой, в которой будет работать твоя программа, мне пока непонятны. А точки эти - точка входа (грубо говоря, каким образом мы попадаем в main, как предеаём тут argc, argv, envp) и обращения к "ОС"
0
|
|
|
0 / 0 / 0
Регистрация: 16.05.2009
Сообщений: 11
|
|
| 18.05.2009, 08:53 [ТС] | |
|
А если задать вопрос вот так.
Есть код на с++, который должен работать как код загрузочного сектора жесткого диска на процессоре х86 (соответственно до запуска любой ОС). Вопрос: какой компилятор использовать?
0
|
|
|
|
|
| 18.05.2009, 10:43 | |
|
Любой. Только такими характеристиками код на Си++ не обладает. Это соркк чистый Си. Из тех соображений, что если вместо слова struct использовалось слово class, то это ещё не есть программа на Си++
0
|
|
|
0 / 0 / 0
Регистрация: 16.05.2009
Сообщений: 11
|
|
| 18.05.2009, 11:13 [ТС] | |
|
А если любой - это компилятор от Visual Studio, то все что я там нашел это пять подсистем (/subsystem) и никакого указания как получить просто БИНАРНЫЙ код. Конечно можно взять получившийся exe-шник вырезать стартап код, служебные данные РЕ формата и оставить голый код полученный при компиляции написанного на с++, но хочется инструмента, которому можно просто указать, что де на выходе требуется только то, что написано программистом и ничего другого.
0
|
|
|
|
|
| 18.05.2009, 13:18 | |
|
Таких инструментов напрямую нет
Я не знаю как в винде, но всякие образы от линуха именно так и делаются. Собирается куча объектников, дальше ручками запускается линкер. В gnu-линкер подаётся специальный скрипт, в котором описана карта памяти (по большому счёту этот скрипт влияет только на то, в какой последовательности и с каких адресов будут размещены разные секции кода). Далее специальными утилитами вырезаются исполняемые секции и получается некий образ, на который затем настраивается boot
0
|
|
|
0 / 0 / 0
Регистрация: 16.05.2009
Сообщений: 11
|
|
| 18.05.2009, 13:38 [ТС] | |
|
Спасибо.
Придется видимо что-то подобное и делать.
0
|
|
| 18.05.2009, 13:38 | |
|
Помогаю со студенческими работами здесь
15
Бинарный поиск через рекурсию: разобрать логику кода Записать в бинарный файл массив объектов Student (бинарный файловый ввод/вывод) Сконвертировать текстовый файл в бинарный, переписать только положительные числа в другой бинарный файл Компилирование Компилирование Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|