Size: a a a

Chaos Constructions Demo/Retro

2020 April 12

AV

Artem Vasilev in Chaos Constructions Demo/Retro
Евгений Красников (Jin X)
Обычный DOSBox тоже норм работает с vgaonly. Только при включении захвата начинаются глюки.
А разрешение там какое-то трэшовое: 792х558 или около того.
вот в том и фишка :) на таком разрешении фигачить в софте - сожрать кучу тактов, а интра-то 94-го года, когда 486dx33 был весьма крутой тачкой
источник

A

Anton "Dart" Nikolaev in Chaos Constructions Demo/Retro
Евгений Красников (Jin X)
Там все эффекты генерятся в зависимости от текущей координаты. По принципу шейдеров. Т.е. идёт проход по всему экрану, вызывается функция текущего эффекта, получается цвет и ставится в текущую точку. При этом текущая координата X и Y вычисляется заранее. И всё в стандартной палитре. Это то, что я понял, мельком глянув исходник.
Но мне очень интересно, как реализован переход. ну и вообще отдельные эффекты как вычисляются (скажем так, формулы этих эффектов).
Идея крутая бесспорно! :))
Возможно использвуется само-модифицирующийся код, когда ты изменяешь не переменные - а сам код, на старых комах где - конвеерный кэш CPU - маленький, то сама прогамма не сумеет закэшироваться и её можно поменять в ОЗУ, в DosBox тоже работает.
источник

ЕК

Евгений Красников (Jin X) in Chaos Constructions Demo/Retro
100bit
...а можно на русском теперь?
А надо? :))
источник

ЕК

Евгений Красников (Jin X) in Chaos Constructions Demo/Retro
Anton "Dart" Nikolaev
Возможно использвуется само-модифицирующийся код, когда ты изменяешь не переменные - а сам код, на старых комах где - конвеерный кэш CPU - маленький, то сама прогамма не сумеет закэшироваться и её можно поменять в ОЗУ, в DosBox тоже работает.
Да не, там самомодификации не видно.
А код так-то можно поменять и на новых CPU, даже если он закэшируется, он всё равно перезагружается, а не тупо старое из кэша берётся.
источник

ЕК

Евгений Красников (Jin X) in Chaos Constructions Demo/Retro
Хотя я помню, давным-давно читал и даже пробовал, была какая-то фишка с этим связанная, но уже не помню в чём там суть.
Но вод даже сейчас тупо попробовал сделать так:
   mov word [x],$9090
 x:  jmp @F
   invoke  MessageBox, 0, 'Hello!', 'Hi', MB_OK
 @@:
Сообщение выводится. Хотя это соседняя инструкция, причём из той же линии памяти/кэша.
источник

ЕК

Евгений Красников (Jin X) in Chaos Constructions Demo/Retro
Кстати, интересно, как эти CPU-уязвимости работают, которые спекуляцию эксплуатируют?
Ну прям вот в подробностях...
источник

ЕК

Евгений Красников (Jin X) in Chaos Constructions Demo/Retro
Ну и другие уязвимости тоже...
источник

NK

ID:0 in Chaos Constructions Demo/Retro
executable music competition начинается https://www.twitch.tv/revisionparty/
источник

AV

Artem Vasilev in Chaos Constructions Demo/Retro
Евгений Красников (Jin X)
Кстати, интересно, как эти CPU-уязвимости работают, которые спекуляцию эксплуатируют?
Ну прям вот в подробностях...
при спекулятивном исполнении проц для ускорения одновременно выполняет и taken и non-taken ветку, затем как условие вычислится, результат ненужной ветки отбрасывается
источник

AV

Artem Vasilev in Chaos Constructions Demo/Retro
но если ненудная ветка успела например прочитать память, то может произойти загрузка данных в кэш
источник

AV

Artem Vasilev in Chaos Constructions Demo/Retro
далее можно замерить время либо выполнения этого куска кода, либо прочитать массив и замерить время его чтения
источник

AV

Artem Vasilev in Chaos Constructions Demo/Retro
и по разнице времени исполнения можно спопробовать вытащить данные
источник

AV

Artem Vasilev in Chaos Constructions Demo/Retro
например что-нибудь типа
mov eax, something
cmp eax, 16
jnz not_our
mov ebx, [edx + eax]
.not_our
источник

DS

Dolphin Soft in Chaos Constructions Demo/Retro
Евгений Красников (Jin X)
Не забывай, что это всё ещё пожато.
Но насилие да, есть там. Потому что DOSBox колбасится не по-детски %))
Так вот откуда ноги растут, а я смотрю, что-то прям все до боли знакомо, и прям по кальке...
источник

AV

Artem Vasilev in Chaos Constructions Demo/Retro
потом замерить чтение из массива по [edx] и на тех участках где чтение быстрее, там было чтение из [edx + eax]
источник

AV

Artem Vasilev in Chaos Constructions Demo/Retro
если мы можем манипулировать eax или edx либо их знаем, то можно потихольнку вытягивать данные :)
источник

AV

Artem Vasilev in Chaos Constructions Demo/Retro
это очень вкратце и очень упрощенно, на самом деле все явно сложнее
источник

AV

Artem Vasilev in Chaos Constructions Demo/Retro
погрешность - длина кэш-строки, плюс всеь массив по edx не должен лежать в кэше
источник

AV

Artem Vasilev in Chaos Constructions Demo/Retro
на на это обчно тоже находят управу :)
источник

ЕК

Евгений Красников (Jin X) in Chaos Constructions Demo/Retro
Artem Vasilev
и по разнице времени исполнения можно спопробовать вытащить данные
Не понимаю, как ты вытащишь эти данные? А если ты и так можешь обратиться к памяти по eax или edx, тогда зачем вся эта канитель нужна?
И почему будет разница в скорости, если оба куска загрузятся в кэш всё равно?
источник