Обновить
32.67

Assembler *

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

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

Маленький 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 мин
Количество просмотров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.3K

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

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

Я сразу же подумал: «Ну конечно, я знаю тысячу статей и видеороликов на эту тему», но вскоре осознал, что практически во всех таких источниках от читателя требуется знать компьютерный жаргон, внутреннее устройство, промежуточные представления, т.д. Вот какая проблема здесь возникает: те, кто пользуется компиляторами (как, например, мой друг), всем этим не заморачиваются. Их не волнует, каково именно промежуточное представление 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 мин
Количество просмотров893

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

Ломаем

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

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

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

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

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

Читать далее

Одноплатник на 155-й серии — ЧПУ

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

А задумывались ли Вы, что можно сделать на ЭВМ «Берёста-4» с объемом памяти ПЗУ 256 байт? Многие из Вас скажут, что можно всего лишь поморгать светодиодом, а я скажу Вам, что можно сделать ЧПУ станок.

Читать далее

Создаём пасьянс для забытой периферии Nintendo

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

Недавно я закончил создание пасьянса для Nintendo E-Reader. Мне удалось уместить его на одной карте, и это практически полнофункциональная версия игры. Я очень доволен тем, что получилось.

Что такое E-Reader?

E-Reader — это периферийное устройство для Game Boy Advance, выпущенное компанией Nintendo в 2002 году. Сканируя карты, где есть полоска с кодом из точек, можно загружать мини-игры, дополнительные уровни, анимации и так далее.

Читать далее

Хакаем банк на 1337UP LIVE CTF 2024

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

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

Читать далее

Поревьюим и порефакторим — Ассемблер для любопытных #2

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

Ещё статья про ассемблер для тех кто с ним не знаком. В предыдущей про 5 ассемблеров последний примерчик вызвал критику за "упрощенизм". А давайте посмотрим вместе как его улучшить и немножко нарастить - в качестве "продолжения знакомства".

Заодно полюбуемся на несовместимость Linux и BSD, а также на различие 32 и 64-битной версии обеих ОС - и подумаем как с этим бороться.

Автор не претендует на непогрешимость, поэтому приглашаем умудрённых коллег делиться идеями и подсказками в комментариях если что упущено.

cmpb $0, (%eax)

Разбор dos-подобной операционной системы. OzonOS

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

Встретил на Хабре очередную статью об написании «простой операционной системы с нуля» и решил поделится своими потугами на эту тему.

Немного предыстории

В далеком уже 2011 мне в руки каким‑то чудом попала книга «Ассемблер. Экспресс курс» за авторством Александра Панова. После Паскаля,изучаемого в школе, ассемблер показался мне языком неограниченных возможностей. После того как я вдоволь наигрался со всякими огоньками и прочими бегущими символами мне захотелось создать что‑то крутое. А что может быть круче чем собственная ОС? Так в 2012.

Переполнить стек.