Обновить
43.82

Assembler *

Язык программирования низкого уровня

Сначала показывать
Порог рейтинга
Уровень сложности

Векторизация в RISC-V. Основы

Уровень сложностиСложный
Время на прочтение13 мин
Количество просмотров6.2K

Многие современные вычислительные задачи, в частности повсеместная обработка изображений и звука или работа с матрицами для ИИ, хорошо поддаются параллелизации на уровне данных.  Чтобы ускорить такие вычисления, производители процессоров добавили в архитектуры специальные SIMD инструкции, которые позволяют работать за одну инструкцию сразу с несколькими элементами.

В процессорах архитектуры x86 SIMD инструкции добавляются по принципу ad hoc. Из-за такого подхода, легаси и требований обратной совместимости в x86 накопилось много проблем.

Архитектура RISC-V относительно молодая, и при её разработке учтён прошлый опыт. В основе подхода к SIMD в RISC-V заложили идею чистого векторного процессора.

В этой статье рассмотрим основные принципы работы векторного процессора и базовые векторные операции с памятью и арифметикой.

Читать далее

Путь от Кода до Бинарного Файла

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров4.5K

Как же исходный код превращается в бинарный файл, который потом исполняется на компьютере? Не нашёл ни одной статьи, которая описывала бы полный процесс от начала до конца, поэтому я написал данный материал.

Читать далее

Как код С выполняется на процессоре ARM: разбор ассемблера

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров3.9K

При вызовах функций на языке С активно используется стек, который также именуется «стек вызовов». По мере того, как мы вызываем функции, они формируют так называемый «стек кадров». При каждом вызове функции образуется кадр, и эти кадры укладываются в стеке, где под них выделяется место. Далее в кадре из стека выделяется память под переменные и промежуточные значения. В кадре стека также содержится указатель на предыдущий кадр и значение счётчика команд. Та команда, которой оно соответствует, должна быть выполнена, как только кадр будет вытолкнут из стека. Далее давайте дизассемблируем вызовы функций в C, чтобы понять, как устроен стек кадров в ассемблере для ARM.

Читать далее

Сборка компьютера sap-1 (компьютер Бена Итера) в игре Turing Complete

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров4.7K

Здравствуйте, меня зовут Дмитрий. Сегодня я хотел бы рассказать вам про очень интересную игру Turing Complete. Я назвал бы её симулятор разработчика компьютеров. А также мы прямо в этой игре соберем компьютер SAP-1 более известный как компьютер Бена Итера.

Сразу скажу что мне игра очень понравилась. Ну вот знаете иногда про игру все говорят какая крутая игра, а ты в неё поиграешь и думаешь. Ну игра ничего особенного. А иногда встречаются игры про которые никто не говорит особо, но стоит в неё начать играть, как обнаруживаешь что ты просто не можешь от неё оторваться. Как раз эта игра относится ко второму типу. У меня такое было c Factorio я в неё тоже долго не мог перестать играть. Так что возможно я буду чуть-чуть предвзятым.

Читать далее

Реверс-инжиниринг 128-битного дракона

Время на прочтение12 мин
Количество просмотров9.7K


КДПВ для этой статьи сгенерировала программа размером всего в 16 байт. Под катом разберёмся в том, как в столь скромном объёме сумел спрятаться дракон и какие силы поддерживают его жизнь. Для лучшего понимания происходящего мы портируем эту красоту на JavaScript.

Читать дальше →

Маленький bool Дума

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров5.6K

Должен признать, у меня есть некая особая любовь к классическому DOOM. Несмотря на то, что игре уже 31 год, в нее все еще весело играть самому (хотя и выходит у меня так себе) или просто смотреть на то, как другие в нее играют (вот в этом я показываю себя лучше); и поскольку исходный код игры открыт, ей можно наслаждаться на любой современной платформе — ПК, смартфон, камера, осциллоскоп — да и вообще на любой вещи, которая придет вам в голову. В результате чего, благодаря ряду обстоятельств, я оказался меинтейнером нескольких связанных с DOOM пакетов в Fedora Linux.

Итак, за несколько месяцев до нового релиза, проект Fedora Linux осуществляет массовую сборку всех пакетов. Это имеет несколько преимуществ — позволяет убедиться в совместимости ABI, обновить статически линкуемые зависимости, использовать новые оптимизации компилятора и так далее. Как бы то ни было, с приближением релиза Fedora Linux 42 в середине апреля, пришло время для массовой пересборки, и как часто бывает, не все пакеты выжили. Одним из пакетов, которые не удалось собрать оказался chocolate-doom.

Читать далее

Опыт написания компилятора вручную

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров8.9K

Компилятор и главный репозиторий: GitHub

Здесь я напишу о своём личном проекте — компиляторе к C-подобному языку. Я не являюсь профессиональным разработчиком, изучал эту тему почти самостоятельно и не читал никакие книги по написанию компиляторов (но читал по операционным системам).

Читать далее

Самый странный лексический синтаксис, который я обнаружила, исследовав 42 языка программирования

Время на прочтение13 мин
Количество просмотров26K

Программирование — это не только алгоритмы и логика, но и удивительное разнообразие синтаксиса языков. Работая над новым средством подсветки синтаксиса для llamafile, разработчик Justine Tunney* исследовала 42 языка программирования — от классического C и экзотического Tcl до мощного Ruby. 

Justine делится своими открытиями о том, насколько причудливым и непредсказуемым может быть лексический синтаксис. Например, триграфы в C — устаревший инструмент для поддержки клавиатур с ограниченными символами, фиксированные длины строк в FORTRAN, вложенные комментарии в Haskell или строки с двойными квадратными скобками в Lua. Ruby вообще оказался чуть ли не самым сложным языком для подсветки из-за его контекстно-зависимого синтаксиса.

Под катом вы найдете описание разработки инструмента подсветки и исследование того, как языки программирования решают одни и те же задачи по-разному. Если вам интересны синтаксис, языковые особенности и сложности лексического анализа – эта статья для вас.

*Обращаем ваше внимание, что позиция автора может не всегда совпадать с мнением МойОфис

Читать далее

sincerely yours

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.1K

Устало опускаю продолжение своего текста на Хабре “Остаюсь искренне ваш старпер и startuper" . Многие печали случились за прошедшие три года. На их фоне досада о зависших $20 членского взноса (я успел только взглянуть на dev console) в Google Play Market - шкурный, где-то даже непорядочный, пустячок. О котором нет-нет вспоминается только в дни, когда и десятая его часть, деликатно выражаясь, могла бы согреть кринжу не только душу.. Но “забыть, наплевать, растереть”!

Я - живой. “ «Хорошая жена, хороший дом – что еще надо человеку, чтобы встретить старость.”?! Да самую малость.

“Закрыть..” Слово “гештальт” мне не нравится. Есть в нём что-то опереточно “великосветское”, неизвестное и чуждое в уездном уральском городке.

“Закрыться”. Лучше, но всё ещё не то...

“Отпустить”. С любовью и благодарностью. Вот. Годится..

Существует легенда, авторство которой я так и не смог нагуглить.(Уж не сам ли я её, чего доброго, придумал?) Эта легенда гласит о том, что, якобы, в 1991-ом году в московскую компанию ДОКА обратился некий заграничный аноним (из Европы или США) с техзаданием на разработку игры “в железную дорогу”.

Игра получилась и хорошо разошлась на bbs и дискетах. Мне она попалась десятью годами позже в версии 2.0 о чём, более чем излишне подробно в ВК здесь.

По индустриальным меркам геймплей игры тянет разве что на “удовлетворительно”. Рядовая игрушка “на щелбаны”. Но “святые угодники”! Как красиво (v.1.5), грамотно (v 2.0) сделано внутри! И если от “акробатических этюдов” А.Снегова захватывает дух, а аккуратность А.Ефремова вызывает почтение, то КАК? Кааак!? Как вряд ли когда-либо толкавшая пальцем обесточенные паровозики Людмила Чуринова вышла на artwork в стиле ДетГиз лубка?! Потрясающее попадание в эпоху и возраст самодельных проволочных телефонов, телеграфов Морзе и проносящихся мимо в клубах паровозного дыма литерных поездов!

Читать далее

Решаем тесты безупречно в MyTestX

Время на прочтение4 мин
Количество просмотров8.8K

Мы сидели с друзьями на зимней сессии и готовились к экзамену по основам алгоритмизации и программирования. Экзамен состоял из двух частей: тестовая часть и практика. Тестирование у нас обычно проводится с использованием MyTestX. Это примитивное ПО для проведения компьютерного тестирования. Тем не менее почти на любом экзамене или зачете у нас используется именно эта программа.

И тут один из моих друзей говорит: "А давай взломаем MyTest". Мысли о взломе различного ПО у нас возникали часто, но обычно в виде шутки. Но в данном случае я подумал, а почему бы и нет? Вряд ли разработчик при создании своего творения озаботился о безопасности или обфусцировал свой код. Под взломом я подразумеваю изменение некоторых байтиков в программе, чтобы проходить тесты на высокие баллы. Как окажется в дальнейшем, я был прав, и мне удастся довольно просто сделать так, чтобы результаты моих тестов были безупречными.

Читать далее

Упрощаем «простой» ELF

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров8.4K

Давайте-ка напишем простую программу для Linux. Насколько трудной она может быть? Только тут надо учесть, что простота противоположна сложности, но не трудности*, и создать нечто простое на удивление трудно. А что останется, если избавиться от сложности стандартной библиотеки, всех современных средств безопасности, отладочной информации и механизмов обработки ошибок?
Читать дальше →

256 байт веселья, или как развлечь себя Ассемблером когда скучно

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров30K

Это еще одна статья про демосцену, сайзкодинг, ассемблер, MS‑DOS и ретрокодинг. То есть, о том, как ночами напролет добровольно и бесплатно писать бесполезный и очень трудоемкий код, и получать от этого массу удовольствия (и седую бороду). Даже если вы уже пробовали и вам не понравилось, вам все равно стоит почитать. Возможно, вы что‑то делали не так. Например, использовали не те буквы и цифры. А еще тут есть подборка «демок» размером в 256 байт!

Читать далее

Стековая виртуальная машина на языке Си

Уровень сложностиСредний
Время на прочтение23 мин
Количество просмотров11K

Разработка виртуальных машин может быть не только интересным занятием на вечер, но также и полезным приложением при обучении студентов языку ассемблера на предметах ОАиП (основы алгоритмизации и программирования) и ААС (архитектура аппаратных средств). Целью данной статьи станет создание простой стековой виртуальной машины с собственным языком ассемблера, способным выполнять операции условного и безусловного переходов, инкрементирования и декрементирования чисел, загрузки и выгрузки значений в стек. Машина получится минималистичной и будет обладать лишь 10-ью инструкциями, на основе которых можно будет далее вполне корректно создать собственный высокоуровневый язык программирования.

Читать далее

Ближайшие события

Как взломать Harley Davidson. Часть 1

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров11K

В декабре 2021 года была опубликована статья по взлому фирменного диагностического комплекса. С тех пор появилось новое поколение мотоциклов, которые никого не оставляют равнодушными. Давайте покопаемся у них прямо в мозгах.

Читать далее

Как избегать типичных ошибок при встраивании ассемблерных вставок: подборка правил

Время на прочтение5 мин
Количество просмотров5.4K

Ассемблерные вставки, используемые компиляторами GCC и Clang, опосредуют взаимодействие высокоуровневых и низкоуровневых языков программирования. Это тонкая и коварная штука. Многие попадают в расставленные здесь капканы, зачастую совершенно неожиданно для себя. В сущности, ключевое слово asm можно перевести на C и C++ как unsafe. Почти в любых руководствах по встроенному ассемблеру, в том числе, и на ужасной странице ibilio, которая десятилетиями попадает в самый верх поисковой выдачи, неисправимо фигурируют фундаментальные серьёзные ошибки, а примеры в большинстве своём некорректны. Наиболее опасно, что эти примеры обычно приводят к ожидаемым результатам! Ситуация плачевная. Эта статья — не руководство, а подборка элементарных правил, которые помогут вам избежать самых распространённых ошибок либо отловить их при ревью кода.

Здесь мы сосредоточимся сугубо на расширенном, а не на базовом ассемблере, а правила в этих версиях отличаются. На первом пишут любые инструкции, относящиеся к встроенному ассемблеру, с ограничениями или затираемыми. То есть, имеем токен : в обрамлении asm. Базовый ассемблер — тупой инструмент, который используется сравнительно нечасто, в основном в самом верху файла с кодом или в “голых” функциях. Поэтому злоупотребления базовым ассемблером на практике маловероятны.

Читать далее

Программа, которая падала на первой команде

Время на прочтение9 мин
Количество просмотров13K

Нашего клиента донимали отчёты о вылетах, показывавшие, что его программа ломается на самой первой команде.

Я открыл один из дампов вылета, он оказался настолько странным, что отладчик даже не мог понять, что пошло не так.

Читать далее

Оптимизация компилятора на пальцах

Время на прочтение15 мин
Количество просмотров6.3K

Почему я это написал, и как читать статью

Недавно получил от друга такое сообщение:

Знаешь, какая статья была бы реально интересна? Если бы в ней было показано, что именно происходит с твоим кодом в результате оптимизаций.

Я сразу же подумал: «Ну конечно, я знаю тысячу статей и видеороликов на эту тему», но вскоре осознал, что практически во всех таких источниках от читателя требуется знать компьютерный жаргон, внутреннее устройство, промежуточные представления, т.д. Вот какая проблема здесь возникает: те, кто пользуется компиляторами (как, например, мой друг), всем этим не заморачиваются. Их не волнует, каково именно промежуточное представление LLVM, или что такое φ-узел, или какой проход и почему называется «ротацией циклов». Нет, их интересуют (в порядке убывания приоритета) ответы на вопросы: (1) что, (2) почему, (3) как.

Читать далее

Расширенный экран «Profi», что это такое и как с ним работать. Практикум 002. Вертикальный скроллинг

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров1.6K

Продолжаем цикла статей по работе с расширенным экраном компьютера "Profi". Второй практикум.

В предыдущих статьях была описана структура расширенного экрана компьютера "Profi", работа с файлами в OS CP/M, а так же загрузка и вывод картинки из файла на экран. Теперь давайте рассмотрим методы работы с расширенным экраном и попробуем проскроллировать его.

Статья была опубликована в 2023 году в 44 номере журнала по "Downgrade".

Статья написана в соавторстве с Вадимом Чертковым.

Читать далее

Взлом Retro2Win через ROP-chain на 1337UP LIVE CTF 2024

Уровень сложностиСложный
Время на прочтение11 мин
Количество просмотров906

Уважаемые дамы и господа, сегодня я представлю вам еще одно решение одного из челленджей с соревнования по кибербезопасности 1337UP LIVE CTF 2024. Данное задание кардинально отличается от того, что я описывал в предыдущей статье. Сложность в этом случае довольно таки высокая. Но не будем откладывать дела на потом. Идем на страницу с челленджем и приступаем.

Ломаем

Загадка потерянного инкремента

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров6.7K

Всё вроде должно быть просто

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

Но по моему опыту, чрезвычайно простой машинный код — это, на самом деле, один из самых частых источников чего-то странного. Так как мы передаём CPU ограниченное количество крайне специфичных команд без остальной части когда, то упираемся в границы того, что проектировщики оборудования ожидали встретить в реальном мире. В этой ситуации вы с большей вероятностью сможете пощупать границы микроархитектуры, чем в более стандартном сценарии.

Читать далее