Вдохновившись статьёй Привет из свободного от libc мира,
я так же решил проделать нечто подобное. Чтобы не заниматься этим
бесцельно, я решил поставить перед собой следующую задачу. Сделать
программу, выводящую какую-нибудь простую строку, вроде «ELF, hello!».
Разобраться с тем, как именно она будет представлена в исполняемом
файле. Ну и попутно, постараться уложиться в 100 байт.
Для начала, стандартный helloworld на C++
Доброго времени суток!
Некоторым программистам иногда приходит в голову мысль «а не изучить ли
мне ассемблер?». Ведь на нем пишут самые (с некоторыми оговорками)
маленькие и быстрые программы, да и охота ощутить вкус низкоуровневого
программирования берет свое. Ну и для общего развития не повредит.
Мысль эта не обошла стороной и меня. Вдохновившись историей одного байта, я ринулся в бой…
… но оказалось, что найти материал по интересующей теме не так просто,
как хотелось бы. Посему решено было создать на хабре пополняющийся
пост-индекс статей/книг/мануалов/etc. об этом, несомненно, великом
языке.
Под катом находится, собственно, список с краткими комментариями, разбитый по категориям.
UPD
В список начали добавляться ресурсы по программингу микроконтроллеров.
Управляемая градиентная спираль на ассемблере в 256 байт (k29)
Эта статья посвящена созданию на ассемблере графического приложения
весом в несколько сотен байт. После создания полноценной рабочей версии
на 420 байт пришлось попотеть, чтобы запихать всё это добро в 256 байт.
Результат вы можете лицезреть на видео. В статье описывается процесс
создания и общие принципы функционирования.
Предупреждение: Если вы страдаете приступами эпилепсии — НЕ СМОТРИТЕ.
===================================================
Мое почтение читающему!
Топик мог бы получиться просто катастрофически огромным, поэтому
перейдем сразу к делу. Впереди вас ждет рассказ, о том, как можно одну
флешку сделать одновременно загрузочной как для ОС семейства Windows,
так и *nix, а также сделать из нее live-usb. Заранее прошу прощения за
жаргон, не сторонник, но так короче.
Аннотация
Как-то пришлось много раз подряд устанавливать на одну и ту же машину кучу разных операционных систем, как от товарищей
господ из Майкрософт, так и любимых всеми нами *nix`ов. При этом
инсталляторы вновь устанавливаемых ОСей периодически терли загрузчики
ранее установленных, так что приходилось их восстанавливать вручную,
загружаясь с live-usb. Но самое ужасное, что при всем при этом под рукой
была всего одна флешка (и еще 15 компьютеров правда, но толку от
них было мало, так как разбирать их по причинам гарантии в надежде на
лишний жесткий диск было нельзя). Флешка к счастью была большого объ
... Читать дальше »
Разработчики из канадской компании Return Infinity специализируются на
низкоуровневом программировании и экспериментальных разработках. На днях
они выкатили новую версию BareMetal,
64-битной операционной системы, написанной полностью на ассемблере.
Цель этого проекта — избавиться от неэффективного машинного кода,
который генерируют компиляторы высокоуровневых языков вроде C/C++ и
Java. Если изначально писать на ассемблере, то код получается более
производительным и компактным. Вся ОС занимает 16384 байт, а программка "Hello World!” компилируется в файл 31 байт.
Теоретически, это идеальная система для высокопроизводительных систем и
встроенных приложений. BareM
... Читать дальше »
Вдохновленный Shifticida (32 байта) и Самой маленькой гоночной игрой в мире
(58 байт), я решил сделать Самую-самую маленькую компьютерную игру для
x86. Вместо одной игры получились три. Увы, они не такие крутые, как
гоночки, но зато они занимают всего по 30 байт каждая.
Угадай-ка
Игра для двух игроков. Первый игрок нажимает какую-нибудь кнопку на
клавиатуре. После этого второй игрок перебирает кнопки на клавиатуре до
тех пор, пока не нажмет на ту же кнопку, что и первый. Чтобы второй
игрок не мучился очень уж долго, на экран выводятся подсказки. Когда
нужная кнопка найдена, игра заканчивается.
;;Угадай-ка
int 16h ;;Ожидаем нажатие на клавишу
mov bl, al ;;Сохраняем код клавиши в память
still: ;;Главный цикл
int 29h ;;Вывод символа на экран
Название: Пишем вирус... и антивирус
Автор: Петр Хижняк
Издательство: ИНТО
Год: 1991
ISBN: 5-86028-011-4
PDF: 7 Мб
В книге "Пишем
вирус... и антивирус" детально описаны способы создания антивирусных
фагов и программ-детекторов. В ней рассмотрены принципы работы основных
типов вирусов и представлен вашему вниманию ассемблерный текст самого
простого COM-вируса с рассказом о стадиях его создания и о
функционировании отдельных его элементов. Следует отметить, что в данной
книге приведен также текст программы-детектора и фага для этого
вируса. Здесь очень подробно описан процесс создания антивируса,
показана работа вируса и антивируса на практике в среде MS DOS,
предназначенной для IBM PC совместимых персональ
... Читать дальше »
В книге "Как написать
компьютерный вирус", которая также является практикумом программирования
на ассемблере, максимально просто и доходчиво повествуется об основных
принципах функционирования компьютерных вирусов разных типов и детально
описывается их создание. Данная книга содержит огромное количество
комментированных текстов и различную полезную справочную информацию.
Прочитав описываемую книгу, Вы не просто в идеале освоите язык
ассемблера и сможете научиться делать вирусы, но и значительно повысите
собственный профессиональный уровень. Кроме всего прочего мнение о том,
что `вирусные программы пишут лишь гении, мудрецы и `избранные` покинет
Вас навсегда. Данное пособие рассчитано на пользователей, которые
знакомы с языком ассемблера процессоров x86 корпорации Intel, и может
пригодиться профессиональным программистам, студентам ВУЗов и всем
интересующимся программированием для ПК на различных языках низкого
уровня.
Книга
"Ассемблер. Самоучитель" знакомит с ассемблером, который представляет
собой универсальный язык "низкого уровня". Отметим, что на этот язык
переводятся прочие, "высокоуровневые" языки. Являясь основой подобных
языков, ассемблер даёт возможность лучше понять Си, а также C++ и
Паскаль. С помощью данного языка можно написать некоторые элементы
программ так, чтобы они более быстро выполнялись. В силу универсальности
ассемблер предоставляет возможность менять и другие программы, исходник
которых на языке высокого уровня недоступен. Необходимо сказать, что
именно за это его предпочитают использовать истинные хакеры. Начав с
простых примеров, которые были написаны для ассемблера MASM корпорации
Microsoft, и, двигаясь вперед, Вы постепенно сможете научиться создавать
сложные программы для D
... Читать дальше »