наглядно.
https://www.youtube.com/watch?v=93PHxVpPLxA
Офигеть!
почувствуй себя в поезде. Я бы поигрался с этой машинкой 🥹
тут нужша шутка, что чувак начинал его проектировать, когда в школу ходил
зачем шутка?
чтобы пошутить
А как ошибка компиляции выглядит
Ядерный взрыв
Что такое ошибка компиляции в данном случае? Это прямой перевод в машинные коды
Вылет программы
его нет нигде
Вылет программы и ошибка компиляции - совершенно разные вещи
не бывает такого , невалидный код ассемблер не заассемблерит, остальное все валидно и исполняемо
То есть у тебя никогда не вылетала скомпилированная программа?
куда? если ее ОС не прибьет, она так и будет исполняться. на релейном компе ОС нет - она туда не влезет :)
для начала скажите что такое вылет программы? то что прога PF поймала это всецело вина разраба либо самой проги , либо ос
Да я и не спорю, как вина разраба выглядит то на этом пк
В старых системах была команда HALT -- означает остановить процессор до перезагрузки. Если до HALT программа не доходила, то нужно было искать причину такого поведения. Это состояние можно было назвать infinite loop, бесконечный цикл.
Как нет*_*, а где он файл запустил?
как и везде - ошибся, значит получи фигу вместо нужного
залил в program memory
посмотрите например пк микро-80, там вообще вручную данные в память пишутся, тумблерами
Так в видео он же запустил прямо из операционки
он залил бинарник лоадером в релейный комп
Скорее всего, если код просто не туда прыгнет - попадётся неизвестная инструкция, и код перестанет исполняться, или если будет бесконечный цикл - так и будет щёлкать, висеть. Ничего страшного, с панельки можно остановить код, залить новый (исправленный), и всё нормально будет.
Неизвестная инструкция — это когда у тебя есть логика, чтобы детектить неизвестные инструкции. Даже в современном x86 некоторы комбинации префиксов и опкода могут исполняться, а спустя пару поколений стать невалидными. В простых процессорах (тот же 8086 взять) «невалидные» опкоды становятся алиасами похожих валидных, иногда с разными интересными спецэффектами.
Я знаю, поэтому и говорю. Там в декодере по-любому есть логика определения неизвестной инструкции, она всегда и везде есть (наверное).
в продуманных системах неизвестные инструкции исполняются как nop-ы
Это в "продуманных"? )) Это ненормально как раз, какие-то глупые системы. А если я хочу намеренно исключение процессора вызвать с неизвестной инструкцией, перехватить его и прыгнуть куда-то?
ну вот исполняешь код программы и случайно на секцию данных попал, в простейшем случае она исполнится, перепрыгнет куда то может быть (если данные в jump превратятся) и даже где то случайное зацикливание произойдет, вотчдог резетнет проц и все начнется с нуля. выстрела в ногу можно избежать
С чего ты взял, что секция данных исполнится? Про какую архиткетуру речь?
да про любую простейшую. микроконтроллер какой-нибудь
Вот я и говорю, что логика занимает место :) И декодер там скорее всего в виде логики: т.е., у тебя есть инструкции ON, OFF, ONCE — xxxxxx00/xxxxxx01/xxxxxx10 соответственно. Процесссор выбирает нужную логическими операциями (аппаратно, гейтами), а оставшийся xxxxxx11 становится одной из трёх предыдущих. Какой — зависит от того, как физически гейты соединены.
Для этого делают undefined opcode и обещают никогда не использовать эту комбинацию бит для настоящей инструкции.
Это что-то на ARM?
Да у всех есть в том или ином виде. ud2 например.
И что, она выполнится?
Нет, она гарантированно не выполнится. Т.е., среди всех существующих комбинаций байтов какие-то обязательно выполнятся (обещал мануал), какие-то могут выполниться или нет (недокументированные и/или не детектятся как инвалидные), и только несколько гарантированно не выполнятся (обещал мануал). Поэтому, если ты хочешь вызвать исключение #UD, ты используешь 0f 0b, а не 0f 19.
А как же FF FF ?
Стикер
Ну не исполнится ведь? Не знаю, как проверить - ОС то явно перехватит и исключение выдаст, эмулятору тоже нельзя доверять, а чисто в прошивку вшить FFFF и как-то отладить нет возможности. Но не сделает же x86 из этого "nop", а остановит исполнение?
Это не я предлагал делать нопы. Я просто говорю, что детектить все невалидные опкоды дорого (делать их нопами, кстати, тоже значит как-то детектить), плюс невалидные сейчас опкоды могут стать валидными потом. Поэтому на случай, когда тебе нужен гарантированно невалидный опкод, у тебя есть отдельный заранее известный.
Обсуждают сегодня