Что такое объектный код
Перейти к содержимому

Что такое объектный код

  • автор:

Исходный, Машинный и Объектный коды — Разница?

В С++. Опишите максимально чётко, в чём разница между этими тремя понятиями. Примеры — приветствуются.

  • Вопрос задан более трёх лет назад
  • 14690 просмотров

1 комментарий

Простой 1 комментарий

longclaps

Жирно, очень ЖИРНО.
Решения вопроса 1

Исходный код или исходный текст — текст на языке программирования, который пишет человек (как правило, человек). Это обычный текстовый файл (как правило).

Но процессоры в компьютера/смартфонах и пр. — довольно тупые устройства, способные понимать только чрезвычайно простой машинный код.
Поэтому любая программа прямо или косвенно превращается из исходного кода в машинный и только после этого исполняется компьютером/смартфоном и пр.

Объектный код — это промежуточное представление кода. Еще не машинный, но уже не исходный. Используется на этапе сборки программы из нескольких кусков (возможно, написанных в исходном коде разными людьми и в разное время).

Машинный код — уже готов для исполнения. То есть просто берете его, ничего не нужно более. Делаете двойной щелчок мыши, к примеру, и программа запускается.

Пример исходного кода — легко:

package example func Add(p int) int

Пример объектного кода и машинного кода — бессмысленен. Что объектный, что машинный коды этой программы
не предназначены для чтения человеком.

Это для вас будет выглядеть как абракадабра.

! __.PKGDEF 0 0 0 644 30328 ` go object windows 386 go1.11 X:framepointer build id "ZKpaYf_Flzmm6jns9NJp/RbNW-F32vdlI8SgqpfEX" ---- $$B i

И это еще не весь объектный код — там большой файл.

Машинный код — еще бОльшая абракадабра, я его сюда даже вставить не смог. Текстовый редактор не пропускает эту кучу спецсимволов и т.п.

Упомянутая вами цепочка (исходный — объектный — машинный) касается языков программирования, компилируемых в машинный код:
C/С++/Go/Rust/Pascal.

Некоторые языки предназначены для компиляции в байт-код. Его нельзя назвать ни машинный ни объектным. Это Java/Kotlin/C#. Если бы этот код выполнялся непосредственно процессором (CPU) его можно было бы назвать машинным. Но он выполняется только через специальную программу.

Языки Ruby/Python/JavaScript ничего похожего на машинный код не генерят.

Объектный код

Подборка наиболее важных документов по запросу Объектный код (нормативно–правовые акты, формы, статьи, консультации экспертов и многое другое).

  • Программное обеспечение:
  • 58.29.50.000
  • Антивирус КОСГУ
  • База данных это
  • Банк клиент
  • Бухучет программного обеспечения
  • Показать все
  • Программное обеспечение:
  • 58.29.50.000
  • Антивирус КОСГУ
  • База данных это
  • Банк клиент
  • Бухучет программного обеспечения
  • Показать все

Статьи, комментарии, ответы на вопросы

Статья: К вопросу определения критериев изменений программы для ЭВМ
(Соколов Д.В., Шишенина И.В.)
(«Сайт Ассоциации поставщиков программных продуктов НП ППП», 2020) В свою очередь ГОСТы также дают определения объектного кода. Так, объектный код — это представление компьютерной программы на низком уровне, обычно не в форме, непосредственно пригодной для объектного компьютера, а в форме, включающей в себя, помимо информации о процессорных командах, информацию о размещении программы ; исполняемый объектный код представляет собой код, который является непосредственно пригодным для использования центральным процессором объектного компьютера, и является, следовательно, загружаемым в аппаратные средства или систему ПО .

Нормативные акты

«ГОСТ Р 51904-2002. Государственный стандарт Российской Федерации. Программное обеспечение встроенных систем. Общие требования к разработке и документированию»
(утв. и введен в действие Постановлением Госстандарта России от 25.06.2002 N 247-ст) 3.31 объектный код: Представление компьютерной программы на низком уровне, обычно не в форме, непосредственно пригодной для объектного компьютера, а в форме, включающей в себя, помимо информации о процессорных командах, информацию о размещении программы.

Правовые ресурсы

  • «Горячие» документы
  • Кодексы и наиболее востребованные законы
  • Обзоры законодательства
    • Федеральное законодательство
    • Региональное законодательство
    • Проекты правовых актов и законодательная деятельность
    • Другие обзоры
    • Календари
    • Формы документов
    • Полезные советы

    В чем разница объектного кода от байт-кода

    В C# нет ярко выделенного процесса компоновки. Компилятор проходится по файлам, собирая типы в отдельную сборку. Тут нет классической C компоновки.

    28 июл 2020 в 14:55

    Еще прочитал на википедии ,что динамическая библиотека это файл с машинным кодом,а статическая с объектным,если со статической более менее понятно,что это связано с компоновкой, то с динамической нет,разве это не выходит,что динамическая библиотека написана по определенную систему или архитектуру?

    28 июл 2020 в 14:55

    dll, exe содержат машинный код. промежуточный код компилируется JIT в машинный код, т. е. C# -> CIL -> Native.

    28 июл 2020 в 14:59

    ДА! именно под систему и архитектуру! в .NET Framwwork в заголовке файла есть спец. поля для CLR, в .NET Core компиляция так же идёт под каждую систему, только там код сам по себе кросс-платформенный, т. е. код на C# .NET Core может компилироваться где угодно (в пределах Windows, MacOS, Linux)

    28 июл 2020 в 15:19

    1 ответ 1

    Сортировка: Сброс на вариант по умолчанию

    Как такового «объектного кода», как отдельный вид кода, не существует. Есть понятие объектные файлы — это файлы, получаемые при компиляции кода на С/С++/ASM и других языках с компиляцией в машинный код. Например, для Visual C++ эти файлы имеют расширение .obj. Но эти файлы содержат обычный машинный код целевой архитектуры, с единственной разницей, что некоторые адреса функций и переменных в них помечены как неопределенные, и должны позднее заменяться компоновщиком на реальные адреса.

    Но в .NET настоящие объектные файлы не применяются. Файлы .netmodule хоть и похожи на них, но все же по структуре радикально отличаются (они представляют из себя почти полноценный PE файл, отличаясь от скомпонованной сборки только отсутствием раздела .assembly в манифесте). Их можно скормить компоновщику Visual C++ (в том числе совместно с настоящими .obj-файлами! Тогда полученная сборка будет смешанной, то есть содержащей и CIL-байткод, и машинный код), но это применяется только в особых случаях. При традиционной сборке C#/VB приложений компоновка не используется. На выходе компилятора сразу получается исполняемый файл, содержащий только CIL-байткод.

    Отслеживать
    ответ дан 30 июл 2020 в 6:58
    MSDN.WhiteKnight MSDN.WhiteKnight
    20.2k 6 6 золотых знаков 38 38 серебряных знаков 81 81 бронзовый знак

    • c#
    • .net
      Важное на Мете
    Связанные
    Похожие

    Подписаться на ленту

    Лента вопроса

    Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

    Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.4.30.8466

    Код объекта

    В вычислениях, объектный код или объектный модуль является продуктом компилятора. В общем смысле объектный код — это последовательность операторов или инструкций на компьютерном языке, обычно на языке машинного кода (т. Е. двоичный ) или промежуточном языке. например, язык передачи регистров (RTL). Этот термин указывает на то, что код является целью или результатом процесса компиляции, причем некоторые ранние источники ссылаются на исходный код как на «предметную программу».

    Подробности

    Объектные файлы, в свою очередь, могут быть связаны для формирования исполняемого файла или файла библиотеки. Для использования объектный код должен быть помещен в исполняемый файл, файл библиотеки или объектный файл.

    Объектный код — это часть машинного кода, которая еще не была связана с полной программой. Это машинный код для одной конкретной библиотеки или модуля, из которых состоит законченный продукт. Он также может содержать заполнители или смещения, которых нет в машинном коде завершенной программы, которые компоновщик будет использовать для соединения всего вместе. В то время как машинный код — это двоичный код, который может выполняться непосредственно процессором, объектный код имеет частично параметризованные переходы, чтобы компоновщик мог их заполнить.

    ассемблер используется для преобразования ассемблерный код в машинный код (объектный код). Компоновщик связывает несколько файлов объектов (и библиотек) для создания исполняемого файла. Ассемблеры также могут напрямую выполнять сборку в исполняемые файлы машинного кода без промежуточного этапа объекта.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *