Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/26: Рейтинг темы: голосов - 26, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 16.05.2009
Сообщений: 11

Компилирование С++ кода в бинарный

16.05.2009, 12:50. Показов 5120. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста как откомпилировать С++ код (несколько файлов) просто в один кусок бинарного кода по x86 процессоры без указания операционной системы на которой код будет работать.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.05.2009, 12:50
Ответы с готовыми решениями:

Компилирование С++ кода в бинарный
В одном форуме вопрос уже задавался, но по причине отрицательного результата попробую спросить здесь. Есть код на с++, который должен...

Резидент, который при нажатии комбинации клавиш выводит на экран сообщение и выгружается из памяти
cseg segment ;чтобы работало в реальном режиме assume cs:cseg, ds:cseg org 100h main proc jmp init ; переход на...

Объяснение кода перевода с 10 на бинарный и с бинарного на 10
Можете пожалуйста объяснить этот код где что и их значения #include <iostream> #include <cmath> using namespace std; ...

14
MCSD: APP BUILDER
 Аватар для IT_Exp
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
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
16.05.2009, 13:06
sopot
Такое сделать в общем-то нельзя, ибо форматы кодовский файлов, например, на виндах и линухе не совпадают. Либо тебе нужно получить объектный файл для каждого исходника, а затем вырезать из него секцию с кодом (как это делать под виндами - не знаю). В итоге у тебя получится массив байтов, которые есть просто код. При этом дальше с этим кодом ты почти ничего не сможешь сделать, т.к. все обращения к глобальным переменным и функциям у тебя будут смотреть в пустоту. К тому же код Си++ из-под одного компилятора в общем случае не линкуется с кодом из-под другого компилятора

Riffi
пункт 2 заведомо делать нельзя, т.к. файл .obj - это не просто набор кода, это файл, описаный по некотроым правилам, который включает в себя помимо кода кучу дополнительной информации
0
MCSD: APP BUILDER
 Аватар для IT_Exp
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
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
16.05.2009, 14:21
Цитата Сообщение от sopot Посмотреть сообщение
Посмотрю опции линковщиков на предмет сборки объектных файлов не под конкретную ОС, а без нее.
Дело тут не в опциях линковщика, а в том, что в объектном файле есть дополнительная информация о том, в каком месте кода используются какие глобальные переменные/функции

Если твой изначальный исходник типа

C
1
2
3
4
int func (int x, int y)
{
  return x + y;
}
То с ним такой мухлёж действительно можно сделать, ибо тут нет никиах обращений за пределы функции. Единственное, надо быть уверенным, что программные соглашения по передаче параметров на всех ОС совпадают. Обычно соглашения пишутся на архитектуру, но есть подозрения (особенно в части intel'а), что на разных ОС их могут немного менять. Т.е. в случае с данной функцией нужно быть уверенным, что при вызове значения x и y передаются на всех ОС на одних и тех же регистрах (или под одному и тому же смещению в стеке), аналогично с результатом

Код типа

C
1
2
3
4
double func (double x)
{
  return fabs (x);
}
такими свойствами уже не обладает. Потому как в дополнение к самому байтовому представлению кода нужно знать, что в каком-то месте этого кода должен присуствовать адрес функции fabs. В объектном файле такая информация есть, а в чистом коде ей взяться неоткуда
0
0 / 0 / 0
Регистрация: 16.05.2009
Сообщений: 11
16.05.2009, 14:41  [ТС]
Вот для примера (IAR Embedded Workbench).
На выходе получается бинарик работающий без ОС. Поддерживает кучу платформ, в том числе различные микроконтроллеры и процессоры. К сожалению х86 не поддерживается. А мне нужно собрать не маленький проект на с++ под х86.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
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
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
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
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
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
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
18.05.2009, 13:18
Таких инструментов напрямую нет

Я не знаю как в винде, но всякие образы от линуха именно так и делаются. Собирается куча объектников, дальше ручками запускается линкер. В gnu-линкер подаётся специальный скрипт, в котором описана карта памяти (по большому счёту этот скрипт влияет только на то, в какой последовательности и с каких адресов будут размещены разные секции кода). Далее специальными утилитами вырезаются исполняемые секции и получается некий образ, на который затем настраивается boot
0
0 / 0 / 0
Регистрация: 16.05.2009
Сообщений: 11
18.05.2009, 13:38  [ТС]
Спасибо.

Придется видимо что-то подобное и делать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.05.2009, 13:38
Помогаю со студенческими работами здесь

Бинарный поиск через рекурсию: разобрать логику кода
Помогите , уже второй день мучаюсь с алгоритмом бинарного поиска через рекурсию . Не понимаю откуда берутся значения которые мне выдает...

Записать в бинарный файл массив объектов Student (бинарный файловый ввод/вывод)
Здравствуйте. Стоит задача записать в бинарный файл массив объектов student: class student { string firstname,lastname, group; ...

Сконвертировать текстовый файл в бинарный, переписать только положительные числа в другой бинарный файл
Бинарные файлы!! Помогите пожалуйста. Дано бинарный файл ( данные сначала в текстовом, конвертирую в бинарный). Без использования другого...

Компилирование
Помогите, как скопилировать asm файл, если у меня программа состоит из 3х asm файлов, т.е. мне надо создать ехе файл для main.asm

Компилирование
Microsoft Visual C++ 2010 Express, оконное приложение windows forms. Какие настройки нужно выставить в компиляторе что бы приложение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru