![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
LeMoH |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 7.8.2008 Репутация: нет Всего: нет |
скажите пожайлуйста во что преобразуется С-код, в ассемблерный или двоичный
|
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 4 Всего: 49 |
||||
|
||||
yuryhor |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 15.6.2010 Репутация: нет Всего: нет |
Вопрос не совсем корректный. С-код компилируется компилятором в объектный. А затем компоновщик (линкер) формирует рабочую программу в машинных кодах вашего процессора, которую можно в принципе посмотреть дисассемблером. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 4 Всего: 459 |
Я всегда думал, что объектный файл уже содержит машинные коды чередующиеся с внешними символами. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Estranged |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 30.8.2010 Репутация: нет Всего: 3 |
если посмотреть на правильный компилятор, то он бывает в двух частях: front-end и back-end части компилятора. Первая представляет программу в некотором виде (дерево, например, некое внутреннее представление), вторая - из внутреннего представления переводит в машинные коды под конкретную архитектуру. На примере MS VC: CL.EXE - оболочка компилятора, C1.DLL - front-end часть С компилятора, c1xx.dll - fron-end часть C++ компилятора, C2.DLL - back-end часть компилятора, которая и переводит результаты front-end части в объектные файлы. Объектные файлы потом передаются еще одному компоненту компилятора - компоновщику (линкеру), который настраивает вызовы внешних (импортируемых) функций.
Это сообщение отредактировал(а) Estranged - 11.1.2011, 11:51 |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Цепочка С->Obj->Exe более менее в таком виде присутствует во всех компиляторах. Возможны так же промежуточные шаги, но они обычно не видны пользователю (например в gcc цепочка такая: C->Asm->Obj->Exe). Содержимое Obj так же может быть разное. Обычно там исполняемый код+таблицы символов. Но может исполняемого кода и не быть (например в режиме глобальной оптимизации всей программы. В этом случае там лежит промежуточное представление, а реальная генерация кода производится на этапе линковки). Даже в Exe может не быть исполняемого кода - например для .NET платформы там лежит код для виртуальной машины .NET, который преобразуется в реальный исполняемый при первом запуске Exe на исполнение
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Ответы тут, см. "Что такое компилятор".
|
|||
|
||||
LeMoH |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 7.8.2008 Репутация: нет Всего: нет |
спасибо за ответы, и отдельное спасибо за ссылку на faq
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |