|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
31.08.2015, 22:10 | #1 |
t45t
Участник клуба
Регистрация: 20.03.2012
Сообщений: 1,849
|
Сборка ехе-файла в ручную
Ребят, привет всем, вопрос не риторический, но мне интересно: как компилятор от языка С, С++ или Делфи собирают ехе-файл?
Возможно ли не имея никакого компилятора, в простом блокноте написать программу, которая будет складывать 2+2 или еще что-нибудь такое? Спросите зачем...отвечу, просто так, чтоб знать, говорят сейчас свою среду программирования можно написать на любом языке))
from dark to light)
|
31.08.2015, 22:31 | #2 | ||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Цитата:
Цитата:
|
||
01.09.2015, 08:57 | #3 | |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
Цитата:
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
|
01.09.2015, 10:02 | #4 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
например, если у Вас Windows, тогда в блокноте создайте файл с любым именем, расширение ему дайте VBS поместите туда, например, такой текст: Код:
в-третьих, EXE - это специальным образом сформированный двоичный файл, который операционная система (например, Windows) может запустить на исполнение. Зачем Вам руками (в блокноте) это создавать?! Создайте руками (без наличия архиватора и средств сжатия данных), например, ZIP архив. Вот и ваш вопрос из той же серии... |
|
01.09.2015, 19:13 | #5 |
Ваш К. О.
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,777
|
|
01.09.2015, 19:22 | #6 | |
ios developer
Старожил
Регистрация: 16.11.2007
Сообщений: 2,885
|
Цитата:
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!
|
|
01.09.2015, 21:26 | #7 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Ну видимо не все обучены тайной магии вызова компилятора из командой строки.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
01.09.2015, 21:28 | #8 |
ios developer
Старожил
Регистрация: 16.11.2007
Сообщений: 2,885
|
Абсолютно ничего тайного и сложного в этом нет, а скилл более чем полезен, хотя бы для понимания того, что происходит за кулисами.
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!
|
02.09.2015, 08:14 | #9 | |||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Писал специально для таких случаев. Целых 4 части. Цитата:
Цитата:
На ней сейчас все и пишу. Vapaamies вон тоже свой ЯВУ пишет кстати. И Уткин.
I'm learning to live...
|
|||
02.09.2015, 10:44 | #10 |
Участник клуба
Регистрация: 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"
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Запуск 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 |