9 / 9 / 1
Регистрация: 02.08.2010
Сообщений: 270
|
|
1 | |
Как откомпилировать программу на C++ так, чтобы получить "чистый бинарный файл"?19.02.2012, 16:19. Показов 4512. Ответов 19
Метки нет (Все метки)
возникла такая задача-из кода на C++ получить чистый бинарный файл.
В случае с ассемблером, у NASM-а можно было написать например так: nasmw -f bin prog.asm и после компиляции появлялся бинарник prog.bin. Вот сейчас имеется файл prog.cpp и компилятор bcc32. Prog.exe легко создаётся, а вот как создать бинарный файл-не знаю. Как можно скомпилировать программу так, чтобы получить бинарный файл? (или из файла prog.cpp получить prog.asm а потом уже prog.bin) Спасибо за внимание.
0
|
19.02.2012, 16:19 | |
Ответы с готовыми решениями:
19
Как откомпилировать программу так, чтобы она работала на 32 битной и на 64 битной ОС Как откомпилировать программу в VC+ 2010 чтобы работало на всех других компьютерах Настроить проект в vs 2008 под чистый си так, чтобы сохранялась подсветка синтаксиса Некоторое количество как положительных, так и отрицательных вещественных чисел и записать их в бинарный файл Дописать программу так, чтобы в массив вводились как целые числа так и вещественные |
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
|
19.02.2012, 16:41 | 2 |
а зачем тебе бинарник?
0
|
143 / 112 / 36
Регистрация: 14.04.2011
Сообщений: 261
|
|
19.02.2012, 16:45 | 3 |
в gcc можно получить асм файл, если компилить с флагом -S
думаю в bcc32 тоже есть такая фича
1
|
9 / 9 / 1
Регистрация: 02.08.2010
Сообщений: 270
|
|
19.02.2012, 16:52 [ТС] | 4 |
с помощью Hex-editor-а вписываю бинарник в MBR и смотрю как программы выполняются без ОС.
хочу создать нечто более интересное чем "Hello,world!", а создавать это "нечто интересное" на ассемблере очень утомительно и сложно. Напишу для С++ пару функций (ассемблерных вставок)..... ну думаю что смысл понятен. я же не могу содержимое exe MBR(нет, конечно,могу, но это работать не будет). Добавлено через 3 минуты я посмотрел help к bcc32-кажется, действительно можно получить код на ассемблере из кода на С++, только не разобрался пока как это сделать. Пишу: bcc32 cpp.cpp -S файла cpp.asm нигде не видно, да и ошибок не выдаёт.
0
|
143 / 112 / 36
Регистрация: 14.04.2011
Сообщений: 261
|
|
19.02.2012, 17:06 | 5 |
обычно на выходе получается файл с расширением .s , в венде не уверен что так, да и про bcc32 первый раз слышу
0
|
9 / 9 / 1
Регистрация: 02.08.2010
Сообщений: 270
|
|
19.02.2012, 17:29 [ТС] | 6 |
появляются файлы cpp.exe cpp.obj cpp.tds
причём появляются они как при использовании опции -S так и без неё. Ладно, у меня есть Virtual Box,Linux и GCC-попробую там получить файл с ассемблером.
0
|
9 / 9 / 1
Регистрация: 02.08.2010
Сообщений: 270
|
|
19.02.2012, 17:36 [ТС] | 7 |
вообще, он пишет что-то про файл cpp.ASM
но этого файла нигде нет
0
|
143 / 112 / 36
Регистрация: 14.04.2011
Сообщений: 261
|
|
19.02.2012, 17:41 | 8 |
1
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
19.02.2012, 22:00 | 9 |
Заинтересовало- так я так понял, ты уже пытался породелать подобный трюк с простым "Hello, word" и у тебя получилось (коль скоро ты переходишь на более сложное), так?
0
|
9 / 9 / 1
Регистрация: 02.08.2010
Сообщений: 270
|
|
19.02.2012, 22:45 [ТС] | 10 |
Верно,я проделал подобный трюк. Только программу Hello world я писал сразу на ассемблере, в NASM-е я создал из кода на ассемблере бинарник. Теперь хочу что-то большее чем привет мир, а что-то большее писать на ассемблере слишком сложно и не нужно-есть же языки высокого уровня.
0
|
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
|
19.02.2012, 23:04 | 11 |
Плюсы будет очень сложно отучить требовать runtime-библиотек...
0
|
9 / 9 / 1
Регистрация: 02.08.2010
Сообщений: 270
|
|
19.02.2012, 23:08 [ТС] | 12 |
Не смотря на то что в теме я говорил именно С++ я еще не определился с языком, возможно буду использовать С, не думаю что мне нужно будет ООП... хотя...
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
19.02.2012, 23:15 | 13 |
совсем???
А что она делать будет??? для ввода вывода файловых операций хотя бы BIOS нужен дело в том что программы написанные на С не начинаются с функции Main а начинаются со стартового кода который потом и вызывает Main, а стартовый код у каждого компилятора и операционки свой. Посему если будешь использовать BIOS то лучше всего по моему старый борланд 3.5 а если на прямую с железом портами прерываниями то даже не знаю(может быть тоже он но без библиотек)
1
|
9 / 9 / 1
Регистрация: 02.08.2010
Сообщений: 270
|
|
20.02.2012, 19:00 [ТС] | 14 |
я пользуюсь BIOS прерываниями.(ну в Hello,world! пользовался ими-здесь так же).
Старый borland поищу. Что она будет делать-пока и не знаю, знаю только что будет писаться на С\С++(учитывая, что я знаю только С\С++ и "с горем пополам" знаю ассемблер, выбор очевиден) и что буду пользоваться вводом-выводом. что-то я не понял-в чем тут проблема? Если стартовый код не делает ничего, кроме как запускает функцию main, то, в чём проблема?
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
20.02.2012, 19:48 | 15 |
проблема в том что этот стартовый код привязан к операционке
управлять им высший пилотаж а ты и надо бы знать устройство компа в смысле какой порт за что отвечает и по какому адресу находится например видеопамять
0
|
20.02.2012, 20:37 | 16 |
Программы, которые будут работать без ОС (т.е. без библиотечного окружения и обращений к интерфейсам операционной системы) вполне можно писать на Си. Многие boot'овые менеджеры на Си и пишут. Но при этом нужно очень хорошо понимать, как работает компилятор.
Вопрос к polimorf96: ты когда нибудь писал то, что ты сейчас хочешь написать, но на ассемблере? Если нет, то с компилятором на стартовом этапе лучше не связываться, а попробовать именно на ассемблере. Язык Си++ тоже можно использовать, но тут надо очень хорошо понимать, что Си++, в отличие от Си, содержит очень много конструкций, которые будут работать только в окружении операционной системы (new/delete, exceptions, инициализация статических экземпляров классов, куча всякой прочей херни). А потому здесь надо ещё более чётко понимать, как работает компилятор Вот тут есть пример того, как компилятор использовать в качестве ассемблера, но в рамках операционной системы: До слез Хочу научится Ассемблеру!!! Если это не осилишь, дальше можешь не двигаться, ибо всё равно далеко не уедешь Если я правильно понимаю, чего ты хочешь
1
|
9 / 9 / 1
Регистрация: 02.08.2010
Сообщений: 270
|
|
25.02.2012, 22:26 [ТС] | 17 |
Отвечаю-нет.
Ассемблер изучаю не так давно, чтобы писать нечто такое большое на Ассемблере. Я хотел реализовать на ассемблере лишь пару функций для ввода/вывода(используя BIOS прерывания), а остальное на С++ (предпочтительнее было бы именно на С++, т.к. есть какой-то опыт работы в нём, да и хотелось бы при написании использовать ООП.)
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
25.02.2012, 22:39 | 18 |
Вот это как раз можно на С
нагуглил http://www.google.ru/#hl=ru&gs... 66&bih=613 http://www.nn.ru/community/biz... d=41035167 Графика через прерывания на Borland С++ 3.1 http://forum.codenet.ru/q52879/ http://citforum.ru/programming/bp70_lr/lr17.shtml последняя правда про защищенный режим и паскаль но есть теория вообше ты чего хочешь написать?? если свой биос (а иначе зачем бинарник) то забудь про прерывания (кроме аппаратных конечно)и работай с портами
0
|
9 / 9 / 1
Регистрация: 02.08.2010
Сообщений: 270
|
|
26.02.2012, 11:08 [ТС] | 19 |
Хочу написать что-то вроде своего загрузочного диска.
Я делал нечто подобное только попроще-вместо создания загрузочного диска я просто вписывал программы в MBR вместо того что там было. Да ну там ещё и программа которую я вписывал была попроще... Вот сейчас хочу написать свою программу(посложнее, значит уже не на ассемблере) и записать её на диск. Единственный способ(единственный, который я знаю)-напрямую с помощью специальных программ вписать бинарный файл в определённые сектора диска. По этому мне и нужен бинарник. Я с помощью Neo Hex Editor (и ещё при помощи пару программ) вписываю бинарный код на нужные адреса на диске.
0
|
26.02.2012, 11:18 | 20 |
А что конкретно ты в MBR записать хочешь? А то у нас тут один товарищ перекомпилировал ядро линукса, в одном месте исходников поправил, чтобы при загрузке линукса его имя выводилось вместо стандартной надписи, и потом на вопросы типа "ты хоть раз что-то в ядре линукса менял?" честно отвечал "да, я собственными руками модифицировал код ядра". Просто не получится ли у тебя то же самое?
Ну и выше ссылки тебе давал. Прежде, чем писать загрузчики, потренируйся на бабочках на пользовательских приложениях
0
|
26.02.2012, 11:18 | |
26.02.2012, 11:18 | |
Помогаю со студенческими работами здесь
20
Изменить программу так, чтобы она выполняла действия через файл Дополнить программу так, чтобы в файл данные записывались упорядоченными по убыванию Файл: Как сделать так, чтобы числа в файл были прописаны не рандомно? Файл: Как сделать так, чтобы при запуске программы проверялось, существует ли файл? Файл: Как сделать так, чтобы все данные записывались в файл и выводились из него при поиске? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |