Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700

Код, который генерируется в результате компиляции

26.01.2017, 10:35. Показов 4126. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем много где читал что С++ компилируется в машинный код (ассемблер)
А это как известно различные команды типа jmp
Но при открытии в редакторе например библиотеки DLL которые написаны на С++ внутри бывают не читаемые крокодилы

Эти крокодилы кем то превращаются в машинный код в момент запуска программы?
Какие программы вообще понимают этих крокодилов?
т.е не человеко-понятные символы, черные пятна в виде символов и т.д
и почему не генерируется просто ассемблер а вместо этого эти самые крокодилы?

Добавлено через 20 минут
Среди этих кракозябр можно найти инструкции ассемблера но все же это не выглядит как нормальный машинный код
т.е такой например
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
mov SCON, #50h
mov TH1, #0FDh
orl TMOD, #20h
setb TR1
again:
  clr RI
  jnb RI, $
  mov A, SBUF
  jnb RI, $
  clr TI
  mov SBUF, A
  jnb TI, $
sjmp again
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.01.2017, 10:35
Ответы с готовыми решениями:

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

Парсить сайт, который генерируется на JS
Всем привет. Подскажите пожалуйста как можно сделать парсинг сайта который строится на JS. Например сайт http://myscore.ru там на главной...

Как запретить трафик, который генерируется самим маршрутизатором?
Требуется запретить трафик, который генерируется самим маршрутизатором. Например, ping. Создал правило 10 deny icmp any any ...

16
192 / 128 / 52
Регистрация: 19.01.2010
Сообщений: 518
26.01.2017, 11:06
Цитата Сообщение от sys_beginner Посмотреть сообщение
В общем много где читал что С++ компилируется в машинный код (ассемблер)
машинный код != ассемблер. Машинный код - это ..0101010101011..., что проще рассматривать в hex-виде. Любым hex-редактором откройте dll и увидите машинный код (бинарник). Ассемблер, в конце концов, тоже транслируется в бинарник компилятором
1
17 / 17 / 4
Регистрация: 10.05.2015
Сообщений: 60
26.01.2017, 11:08
(Если этот вопрос не троллинг)
Исполняемый файл имеет сложную структуру, секции данных и кода, заголовки, итд.
При этом секция кода содержит не символы, а именно коды машинных команд, которые в символьном редакторе могут отображаться как крокозябры.
Можно посмотреть на этот счёт много литературы. Начать можно с Wiki. Можно что то отсюда взять (citforum.ru/programming/windows/machine_code/3.shtml)
можно рихтера почитать. Или учебники какие. Студентов вроде учат с этими структурами работать.
2
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
26.01.2017, 11:29  [ТС]
Selot,
То есть сам ассемблер потом конвертируется в 010101010 процессором? Судя по википедии процессор понимает ассемблер. Правильно ли я понимаю: ассемблер хоть и низкоуровневый но все же поддается чтению и пониманию, а процессор знает как его превратить в нолики и единички. В итоге проц получает свои команды а человек хоть какую то читаемость. Так?

Цитата Сообщение от socslm Посмотреть сообщение
(Если этот вопрос не троллинг)
Почему вы подумали что это может быть троллингом?

Цитата Сообщение от socslm Посмотреть сообщение
Можно посмотреть на этот счёт много литературы
Мне бы просто в общих чертах иметь представление

Добавлено через 4 минуты
Цитата Сообщение от socslm Посмотреть сообщение
ри этом секция кода содержит не символы, а именно коды машинных команд, которые в символьном редакторе могут отображаться как крокозябры
Так машинные команды вроде это просто числа. С чего бы символьному редактору отображать числа как кракозябры?
0
192 / 128 / 52
Регистрация: 19.01.2010
Сообщений: 518
26.01.2017, 11:52
sys_beginner, ассемблерные команды мнемонические. К примеру, команда mov процем воспринимается как набор нулей и единиц, где, грубо говоря, первый байт из этого набора - адрес команды, который вшит в проц, второй байт - регистр/адрес назначения, тертий байт - операнд.
Цитата Сообщение от sys_beginner Посмотреть сообщение
С чего бы символьному редактору отображать числа как кракозябры?
обычный редактор отображает бинарник перегоняя его через ASCII, поэтому кракозябры
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
26.01.2017, 11:58  [ТС]
Цитата Сообщение от Selot Посмотреть сообщение
ассемблерные команды мнемонические. К примеру, команда mov процем воспринимается как набор нулей и единиц, где, грубо говоря, первый байт из этого набора - адрес команды, который вшит в проц, второй байт - регистр/адрес назначения, тертий байт - операнд.
Значит я верно понял?
Цитата Сообщение от sys_beginner Посмотреть сообщение
То есть сам ассемблер потом конвертируется в 010101010 процессором? Судя по википедии процессор понимает ассемблер. Правильно ли я понимаю: ассемблер хоть и низкоуровневый но все же поддается чтению и пониманию, а процессор знает как его превратить в нолики и единички. В итоге проц получает свои команды а человек хоть какую то читаемость. Так?
Цитата Сообщение от Selot Посмотреть сообщение
обычный редактор отображает бинарник перегоняя его через ASCII, поэтому кракозябры
так символы mov входят в ASCII, эти мнемоники тоже отображается в редакторе, но мне не понятно зачем так кракозябры
UѓweNS»—еЈЃЖ7уTьМє"јS(дEYdл“&€Х(|Ё)ЗLЪХ i.K"Ѕ›pJMP"r7+‡u
0
17 / 17 / 4
Регистрация: 10.05.2015
Сообщений: 60
26.01.2017, 12:00
> Так машинные команды вроде это просто числа. С чего бы символьному редактору отображать числа как кракозябры?

Это байт с значением 0x30 отобразится как пробел в текстовом редакторе, а байт c значением 0x41 - как A. (в кодировке ASCII). а байты с значениями 0x1, .... отобразятся более интересно (как крокозябры). Можно посмотреть таблицу ASCII (https://ru.wikipedia.org/wiki/ASCII).

А если учесть что в ходу сейчас "более продвинутые" кодировки (для отображения национальных символов). То тут можно много чего поизучать
1
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
26.01.2017, 12:12
Цитата Сообщение от sys_beginner Посмотреть сообщение
так символы mov входят в ASCII, эти мнемоники тоже отображается в редакторе, но мне не понятно зачем так кракозябры
UѓweNS»—еЈЃЖ7уTьМє"јS(дEYdл“&€Х(|Ё)ЗLЪХ i.K"Ѕ›pJMP"r7+‡u
mov - это для тебя редактор пишет, когда видит например 0x88 в файле, например файл состоит из 1 байта
[0xA1] - кракозябра "¡"
на что редактор ассемблера покажет
mov eax;
1
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
26.01.2017, 12:39
Лучший ответ Сообщение было отмечено Undisputed как решение

Решение

Цитата Сообщение от sys_beginner Посмотреть сообщение
То есть сам ассемблер потом конвертируется в 010101010 процессором?
Да, только не процессором, а компилятором языка ассемблер. То есть, программу, написанную на ассемблере, нужно точно так же компилировать, как и программу на С++.
Разница между С++ и языком ассемблера заключается в том, что между машинными инструкциями и командами языка ассемблер существует довольно хорошее соответствие. То есть, ассемблерной команде, понятной человеку, можно сопоставить машинную команду, понятную процессору, и наоборот. Обратный процесс, то есть отображение машинный код -> ассемблерный код, называется дизассемблированием.
2
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
26.01.2017, 12:43  [ТС]
Raali,
Кажется понял. Я смотрел файл в кодировке UTF-8. А если смотреть через hex редактор то будет нормальное представление

likehood,
Отлично, спасибо! Код С++ насколько я понимаю превращается в ассемблер, затем ассемблерный компилятор на основе того что сгенерирует С++, создает машинный код, который подходит для архитектуры текущего процессора, верно?
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
26.01.2017, 12:47
Цитата Сообщение от sys_beginner Посмотреть сообщение
Код С++ насколько я понимаю превращается в ассемблер, затем ассемблерный компилятор на основе того что сгенерирует С++, создает машинный код
В принципе, компилятор C++ может сгенерировать ассемблерный код, но по-умолчанию в этом нет необходимости. Сразу генерируется машинный.
2
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
26.01.2017, 12:49  [ТС]
Цитата Сообщение от likehood Посмотреть сообщение
В принципе, компилятор C++ может сгенерировать ассемблерный код, но по-умолчанию в этом нет необходимости. Сразу генерируется машинный.
То есть 01010101?
А когда делаются вставки _asm, то они так же компилируются в 0101010?

Машинные коды насколько я понимаю для каждого процессора свои, выходит компилятор анализирует какой процессор используется и генерирует соответствующий ему машинный код?
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
26.01.2017, 12:54
Цитата Сообщение от sys_beginner Посмотреть сообщение
То есть 01010101?
А когда делаются вставки _asm, то они так же компилируются в 0101010?
Да.
Цитата Сообщение от sys_beginner Посмотреть сообщение
выходит компилятор анализирует какой процессор используется и генерирует соответствующий ему машинный код?
Он не анализирует, это задаётся в настройках.
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
26.01.2017, 12:56  [ТС]
Цитата Сообщение от likehood Посмотреть сообщение
Он не анализирует, это задаётся в настройках.
Я вот скачивал себе компилятор но в настройках ничего не задавал, тем не менее все компилировалось
Как компилятор тогда узнал какой у меня проц?
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
26.01.2017, 13:01
Цитата Сообщение от sys_beginner Посмотреть сообщение
Как компилятор тогда узнал какой у меня проц?
Ну, ему не обязательно знать точную модель процессора, достаточно знать его архитектуру. А у современных десктопных процессоров она одинаковая.
Однако, компилятор может сгенерировать более оптимальный код для конкретного типа процессоров, используя дополнительный набор команд, который этот процессор поддерживает. Но тогда программа не будет запускаться на других процессорах.
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
26.01.2017, 13:07  [ТС]
likehood,
То есть общий набор команд одинаковый у всех современных процессоров, но в то же время каждый проц может иметь дополнительные команды которые есть только у него?

Добавлено через 2 минуты
likehood,
Большое спасибо вы очень помогли
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
26.01.2017, 13:07
Цитата Сообщение от sys_beginner Посмотреть сообщение
То есть общий набор команд одинаковый у всех современных процессоров, но в то же время каждый проц может иметь дополнительные команды которые есть только у него?
Верно. Только не всех современных процессоров, а десктопных Intel и AMD.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.01.2017, 13:07
Помогаю со студенческими работами здесь

Белое окно в результате компиляции кода openGL
Привет всем! Недавно, точнее сегодня решил начать изучать OpenGL , но в самом начале столкнулся с проблемой! вот код : #include...

Записать в файл HTML код страницы, которая генерируется с помощью JavaScript
Всем привет есть ли возможность записать в файл HTML код страницы, которая генерируется с помощью JavaScript? Делал так: Dim...

Найти наибольший палиндром, который получится в результате произведения двух чисел
Помогите с решением, пжст! Задача Найти наибольший палиндром, который получится в результате произведения двух чисел, состоящих...

Считывание из файла: в результате вместо единицы выводится ее ASCII код
Считываю из файла, но в результате вместо 1 вижу ее ASCII код. В файле вектора из -1, 0, 1. Помогите, пожалуйста, сижу уже 2 день над...

Код должен выдавать результат запроса, но в результате в selecte только пустые строки
есть вот такой код <select class="vib vibor"> <option selected> Выберите сотрудника</option> <?php $r = mysql_query("SELECT...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru