Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2015, 22:10   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Сборка ехе-файла в ручную

Ребят, привет всем, вопрос не риторический, но мне интересно: как компилятор от языка С, С++ или Делфи собирают ехе-файл?

Возможно ли не имея никакого компилятора, в простом блокноте написать программу, которая будет складывать 2+2 или еще что-нибудь такое?

Спросите зачем...отвечу, просто так, чтоб знать, говорят сейчас свою среду программирования можно написать на любом языке))
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 31.08.2015, 22:31   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Возможно ли не имея никакого компилятора, в простом блокноте написать программу, которая будет складывать 2+2 или еще что-нибудь такое?
Что-то очень простое можно - спеку на пе формат можно нагуглить, а опкоды традиционно есть в интеловских пдфках.

Цитата:
Ребят, привет всем, вопрос не риторический, но мне интересно: как компилятор от языка С, С++ или Делфи собирают ехе-файл?
Там много стадий и вариаций. Если серьезно будете смотреть, то можете глянуть Ахо А.В., Сети Р. Ульман Дж.Д. Компиляторы: Принципы, технологии и инструмент
p51x вне форума Ответить с цитированием
Старый 01.09.2015, 08:57   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Возможно ли не имея никакого компилятора, в простом блокноте написать программу, которая будет складывать 2+2 или еще что-нибудь такое?
ну, в блокнете не получится, а вот в НЕХ-редакторе - очень даже. Главное, не слажать.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 01.09.2015, 10:02   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
в простом блокноте написать программу, которая будет складывать 2+2 или еще что-нибудь такое?
существуют скриптовые языки.
например, если у Вас Windows, тогда в блокноте создайте файл с любым именем, расширение ему дайте VBS
поместите туда, например, такой текст:
Код:
res=1+1
msgbox "результат = " + cStr(res)
во-вторых, если у Вас в Windows установлен .NET Framework, то в него входят средства компиляции кода в EXE (ну, разумеется, получается exe-шник, который будет работать только при наличии .NET Framework, но это касается и множества других, "серьёзных" программ). Если надо, то расскажу, как это сделать "в ручном режиме".

в-третьих, EXE - это специальным образом сформированный двоичный файл, который операционная система (например, Windows) может запустить на исполнение. Зачем Вам руками (в блокноте) это создавать?!
Создайте руками (без наличия архиватора и средств сжатия данных), например, ZIP архив.
Вот и ваш вопрос из той же серии...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.09.2015, 19:13   #5
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
как компилятор от языка С, С++ или Делфи собирают ехе-файл?
Посмотри в исходниках любого компилятора.
Vapaamies вне форума Ответить с цитированием
Старый 01.09.2015, 19:22   #6
crazy horse
ios developer
Старожил
 
Аватар для crazy horse
 
Регистрация: 16.11.2007
Сообщений: 2,885
По умолчанию

Цитата:
Возможно ли не имея никакого компилятора, в простом блокноте написать программу
Какая связь между компилятором и редактором кода? Мб ты имел ввиду без ide?
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!
crazy horse вне форума Ответить с цитированием
Старый 01.09.2015, 21:26   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну видимо не все обучены тайной магии вызова компилятора из командой строки.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 01.09.2015, 21:28   #8
crazy horse
ios developer
Старожил
 
Аватар для crazy horse
 
Регистрация: 16.11.2007
Сообщений: 2,885
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Ну видимо не все обучены тайной магии вызова компилятора из командой строки.
Абсолютно ничего тайного и сложного в этом нет, а скилл более чем полезен, хотя бы для понимания того, что происходит за кулисами.
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!
crazy horse вне форума Ответить с цитированием
Старый 02.09.2015, 08:14   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как компилятор от языка С, С++ или Делфи собирают ехе-файл?
Лови: http://www.programmersforum.ru/showthread.php?t=114406
Писал специально для таких случаев. Целых 4 части.
Цитата:
Возможно ли не имея никакого компилятора, в простом блокноте написать программу, которая будет складывать 2+2 или еще что-нибудь такое?
Ну теоретически да, но сомневаюсь что блокнот выдержит. Нотепад++ может, а виндовый блокнот наверное пошлет.
Цитата:
говорят сейчас свою среду программирования можно написать на любом языке)
Да. Легко. Я свою на Делфи писал, потом в Фрипаскаль перевел, и получил такое: http://www.programmersforum.ru/showthread.php?t=277042
На ней сейчас все и пишу.

Vapaamies вон тоже свой ЯВУ пишет кстати. И Уткин.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.09.2015, 10:44   #10
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Препроцессор языка C (preprocessor) включает заголовочные файлы в исходный код рекурсивно и делает макроподстановки, выполняя макросы. Получается реальный исходный код. Чтобы посмотреть, какой реальный код получается, нужно запустить компилятор языка C с ключом /P , например cl file.c /P

Компилятор языка C (compiler) преобразует реальный исходный код (.c) в объектный код (.obj). Чтобы узнать полный список ключей компилятора, нужно запустить компилятор языка C со строкой /help например cl /help
Компоновщик языка C (linker) преобразует объектный код (.obj) в исполняемый файл (.exe). Чтобы узнать полный список ключей компилятора, нужно запустить компоновщик языка C со строкой /help например link /help

В операционной системе Unix/Linux формат исполняемых файлов OMF.
В операционной системе Windows формат исполняемых файлов COFF или PE.

В начало файла записывается заголовочная структура (struct) формата.
Описание заголовочных структур в http://msdn.microsoft.com/library/wi...dware/gg463125

После заголовочной структуры в файл записывается описание секций и затем сами секции.
Исполняемый файл это образ программы, в котором он загружается в память.

В секции .text содержится код программы в машинных кодах.
В секции .data содержатся переменные, используемые в программе, записанные в шестнадцатеричном виде.
В секции .rdata содержатся константные переменные.

На мероприятиях от Microsoft когда-то были конкурсы по ручной сборке исполняемых файлов наименьшего размера. Победителей подобных конкурсов брали на работу в Microsoft.

Исполяемый файл можно собирать вручную. Но это не получится сделать в блокноте. Для этого нужен шестндацатеричный редактор, который позволит записывать шестндацатеричные числа.

На первом этапе разбора исходного кода код разделяется на токены (token) и производится лексический разбор.
На втором этапе разбора исходного кода токены становятся узлами дерева (tree) и строится дерево синтаксического разбора.
После построения дерева синтаксического разбора производится кодогенерация.

У .obj файла свой формат. .obj файл начинается с заголовочной структуры (header), затем идет описание секций .obj файла, затем записаны секции .obj файла. В .obj файле могут содержаться указания компоновщику (ключи компоновки), как нужно собирать файл.

В .obj файле даются ссылки на внешние (extern) функций. Код внешних функций компоновщик (linker) при компоновке(link) берет из статических библиотек (.lib) и записывает код в исполняемый файл (.exe).
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск exe(не NET сборка) файла программно! Dianochka C# (си шарп) 2 27.05.2012 16:06
Создание ехе-файла helena91 Visual C++ 4 09.03.2011 09:05
Выкидывает из ЕХЕ файла Livores Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 26.05.2010 12:39
Код ехе файла Micha Общие вопросы Delphi 4 09.10.2007 18:06