169 похожих чатов

Релейный компьютер компилирует, загружает и запускает переданный код на ассемблере,

наглядно.

https://www.youtube.com/watch?v=93PHxVpPLxA

43 ответов

85 просмотров

Офигеть!

почувствуй себя в поезде. Я бы поигрался с этой машинкой 🥹

тут нужша шутка, что чувак начинал его проектировать, когда в школу ходил

КТ315
Зачем?

зачем шутка?

КТ315
Зачем?

чтобы пошутить

А как ошибка компиляции выглядит

Alexey
А как ошибка компиляции выглядит

Что такое ошибка компиляции в данном случае? Это прямой перевод в машинные коды

Alexey
Вылет программы

Вылет программы и ошибка компиляции - совершенно разные вещи

Alexey
Вылет программы

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

Dimmu
не бывает такого , невалидный код ассемблер не заа...

То есть у тебя никогда не вылетала скомпилированная программа?

Alexey
То есть у тебя никогда не вылетала скомпилированна...

куда? если ее ОС не прибьет, она так и будет исполняться. на релейном компе ОС нет - она туда не влезет :)

Alexey
То есть у тебя никогда не вылетала скомпилированна...

для начала скажите что такое вылет программы? то что прога PF поймала это всецело вина разраба либо самой проги , либо ос

Mixail Frolov
для начала скажите что такое вылет программы? то ч...

Да я и не спорю, как вина разраба выглядит то на этом пк

Alexey
То есть у тебя никогда не вылетала скомпилированна...

В старых системах была команда HALT -- означает остановить процессор до перезагрузки. Если до HALT программа не доходила, то нужно было искать причину такого поведения. Это состояние можно было назвать infinite loop, бесконечный цикл.

Alexey
Да я и не спорю, как вина разраба выглядит то на э...

как и везде - ошибся, значит получи фигу вместо нужного

Alexey
Как нет*_*, а где он файл запустил?

посмотрите например пк микро-80, там вообще вручную данные в память пишутся, тумблерами

Mixail Frolov
посмотрите например пк микро-80, там вообще вручну...

Так в видео он же запустил прямо из операционки

Alexey
Так в видео он же запустил прямо из операционки

он залил бинарник лоадером в релейный комп

КТ315- Автор вопроса
Alexey
А как ошибка компиляции выглядит

Скорее всего, если код просто не туда прыгнет - попадётся неизвестная инструкция, и код перестанет исполняться, или если будет бесконечный цикл - так и будет щёлкать, висеть. Ничего страшного, с панельки можно остановить код, залить новый (исправленный), и всё нормально будет.

КТ315
Скорее всего, если код просто не туда прыгнет - по...

Неизвестная инструкция — это когда у тебя есть логика, чтобы детектить неизвестные инструкции. Даже в современном x86 некоторы комбинации префиксов и опкода могут исполняться, а спустя пару поколений стать невалидными. В простых процессорах (тот же 8086 взять) «невалидные» опкоды становятся алиасами похожих валидных, иногда с разными интересными спецэффектами.

КТ315- Автор вопроса
s54820
Неизвестная инструкция — это когда у тебя есть лог...

Я знаю, поэтому и говорю. Там в декодере по-любому есть логика определения неизвестной инструкции, она всегда и везде есть (наверное).

КТ315
Я знаю, поэтому и говорю. Там в декодере по-любому...

в продуманных системах неизвестные инструкции исполняются как nop-ы

КТ315- Автор вопроса
Dimmu
в продуманных системах неизвестные инструкции испо...

Это в "продуманных"? )) Это ненормально как раз, какие-то глупые системы. А если я хочу намеренно исключение процессора вызвать с неизвестной инструкцией, перехватить его и прыгнуть куда-то?

КТ315
Это в "продуманных"? )) Это ненормально как раз, к...

ну вот исполняешь код программы и случайно на секцию данных попал, в простейшем случае она исполнится, перепрыгнет куда то может быть (если данные в jump превратятся) и даже где то случайное зацикливание произойдет, вотчдог резетнет проц и все начнется с нуля. выстрела в ногу можно избежать

КТ315- Автор вопроса
Dimmu
ну вот исполняешь код программы и случайно на секц...

С чего ты взял, что секция данных исполнится? Про какую архиткетуру речь?

КТ315
С чего ты взял, что секция данных исполнится? Про ...

да про любую простейшую. микроконтроллер какой-нибудь

КТ315
Я знаю, поэтому и говорю. Там в декодере по-любому...

Вот я и говорю, что логика занимает место :) И декодер там скорее всего в виде логики: т.е., у тебя есть инструкции ON, OFF, ONCE — xxxxxx00/xxxxxx01/xxxxxx10 соответственно. Процесссор выбирает нужную логическими операциями (аппаратно, гейтами), а оставшийся xxxxxx11 становится одной из трёх предыдущих. Какой — зависит от того, как физически гейты соединены.

КТ315
Это в "продуманных"? )) Это ненормально как раз, к...

Для этого делают undefined opcode и обещают никогда не использовать эту комбинацию бит для настоящей инструкции.

КТ315- Автор вопроса
КТ315
Это что-то на ARM?

Да у всех есть в том или ином виде. ud2 например.

КТ315- Автор вопроса
КТ315
И что, она выполнится?

Нет, она гарантированно не выполнится. Т.е., среди всех существующих комбинаций байтов какие-то обязательно выполнятся (обещал мануал), какие-то могут выполниться или нет (недокументированные и/или не детектятся как инвалидные), и только несколько гарантированно не выполнятся (обещал мануал). Поэтому, если ты хочешь вызвать исключение #UD, ты используешь 0f 0b, а не 0f 19.

КТ315- Автор вопроса
КТ315- Автор вопроса

Ну не исполнится ведь? Не знаю, как проверить - ОС то явно перехватит и исключение выдаст, эмулятору тоже нельзя доверять, а чисто в прошивку вшить FFFF и как-то отладить нет возможности. Но не сделает же x86 из этого "nop", а остановит исполнение?

КТ315
Ну не исполнится ведь? Не знаю, как проверить - ОС...

Это не я предлагал делать нопы. Я просто говорю, что детектить все невалидные опкоды дорого (делать их нопами, кстати, тоже значит как-то детектить), плюс невалидные сейчас опкоды могут стать валидными потом. Поэтому на случай, когда тебе нужен гарантированно невалидный опкод, у тебя есть отдельный заранее известный.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта