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

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

26.01.2017, 10:35. Показов 4086. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru