Купить этот выпуск:

590 руб

один раз и навсегда

Также ты можешь подписаться на «Хакер», чтобы читать эти и любые другие материалы

Введение в Assembler

Изучаем низкоуровневое программирование с нуля

Знать ассемблер раньше было обязательно для каждого хакера. Сейчас — только для лучших в своей профессии. Понимать язык машины не только полезно, но и крайне увлекательно: освоив ассемблер, ты научишься программировать без помощи операционной системы и общаться с «железом» напрямую.

Вошедшая в подборку серия статей Антона Карева «Погружение в ассемблер» проведет тебя от самых начал низкоуровневого программирования до написания своих проектов. Экскурс завершается двумя наглядными примерами: в одном показано, как создать на ассемблере свою игру в духе Flappy Bird, в другом — как самому сделать интерпретатор простейшего диалекта бейсика.

Дальше — ещё интереснее. Статья «Вирус для Windows» повествует о создании примитивного вируса на асме, а в статье «Давай напишем ядро!» показано, как разработать собственную микроскопическую ОС.

Две статьи Криса Касперски, включенные в подборку, хоть и были впервые опубликованы в 2005–2006 годах, до сих пор полезны. Одна познакомят тебя с началами 64-разрядного ассемблера, в другой показаны интересные трюки со стеком.

Статья «Самый маленький шелл-код» познакомит тебя с работой на асме в Linux, а заодно ты познакомишься с техникой созданий шелл-кодов, которая применяется при захвате удаленных хостов.

Содержание
(Подписчикам доступно 14 статей)

Введение в Assembler

Зачем учить ассемблер в 2020 году

Погружение в ассемблер, урок 1

Ты решил освоить ассемблер, но перед этим хочешь понять, что тебе это даст как программисту? Стоит ли входить в мир программирования через ассемблер, или лучше начать с какого-нибудь языка высокого уровня? И вообще, нужно ли знать ассемблер, чтобы стать полноценным программистом? Давай разберемся.

Делаем первые шаги в освоении асма

Погружение в ассемблер, урок 2

Ты решил освоить ассемблер, но не знаешь, с чего начать и какие инструменты для этого нужны? Сейчас расскажу и покажу — на примере программы «Hello, world!». А попутно объясню, что процессор твоего компьютера делает после того, как ты запускаешь программу.

Осваиваем арифметические инструкции

Погружение в ассемблер, урок 3

Прочитав эту статью, ты научишься пользоваться арифметическими и логическими инструкциями, а также инструкциями сдвига. Попутно узнаешь, как создавать подпрограммы. А в конце напишешь простенькую игрушку «Угадай число».

Как работают переменные, режимы адресации, инструкции условного перехода

Погружение в ассемблер, урок 4

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

Учимся работать с памятью

Погружение в ассемблер, урок 5

В этой статье я познакомлю тебя с сегментной адресацией и сегментными регистрами, расскажу, как распределяется первый мегабайт оперативной памяти, и покажу получение прямого доступа к видеопамяти в текстовом режиме. Но главное — мы поностальгируем по фильму «Хакер» и напишем психоделическую программу, которой позавидовали бы его герои!

Работаем с большими числами и делаем сложные математические вычисления

Погружение в ассемблер, урок 6

Как ты знаешь, регистры процессора 8088 — 16-битные. Однако при необходимости ты можешь работать через эти регистры не только с 16-битными числами, но и с числами большей разрядности: и с 32-битными, и даже более крупными. В этой статье я сначала расскажу как, а затем мы нарисуем знаменитый фрактал — множество Мандельброта.

Сокращаем размер программы

Погружение в ассемблер, урок 7

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

Floppy Bird

Пишем на ассемблере клон игры Flappy Bird, который уместится в бутсектор

Хочешь попрактиковаться в кодинге на ассемблере? Давай вместе шаг за шагом создадим игру и запустим ее прямо из загрузочного сектора твоего компьютера. Если ты думаешь, что 512 байт маловато для полноценной игры, не спеши с выводами. К концу статьи ты сможешь сделать ее своими руками!

МикроБ

Пишем бейсик на ассемблере и умещаем в 512 байт

Хочешь попрактиковаться в кодинге на ассемблере? Давай создадим интерпретатор бейсика и запустим его прямо из загрузочного сектора твоего компьютера, уместив его в 512 байт. Скорее всего, это будет самая сложная программа в твоей жизни, и когда ты создашь ее своими руками, сможешь без зазрения совести называть себя хакером!

Вирус для Windows

Создаем простейшую вредоносную программу на ассемблере

Конструирование вирусов — отличный стимул изучать ассемблер. И хотя вирус, в принципе, можно написать и на С, это будет как-то не по-хакерски и вообще неправильно. Следующий далее текст — заметка Криса Касперски, которая раньше не публиковалась в «Хакере». Из нее ты узнаешь, как создаются вирусы и как написать простой вирус для Windows при помощи FASM.

Давай напишем ядро!

Создаем простейшее рабочее ядро операционной системы

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

64-битный привет

Архитектура x86-64 под скальпелем ассемблерщика

32-битная эпоха уходит в прошлое, сдаваясь под натиском новых идей и платформ. Оба флагмана рынка (Intel и AMD) представили 64-битные архитектуры, открывающие дверь в мир больших скоростей и производительных ЦП. Это настоящий прорыв — новые регистры, новые режимы работы… попробуем с ними разобраться?

Ассемблерные извращения

Натягиваем стек по-хакерски

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

Самый маленький шелл-код

Создаем 44-байтовый Linux x86 bind shellcode

Ты наверняка знаешь, что практически каждый эксплоит содержит в своем составе так называемый shell-код, выполняющийся при работе эксплоита. Может показаться, что писать shell-код — удел избранных, однако все не так страшно. В этой статье я расскажу, как написать простой bind shellcode, после чего мы его доработаем и сделаем одним из самых компактных в своем классе.