Ассемблер, прощай!

6871
Ассемблер, прощай!
Приятель, если ты соблюдаешь верность ассемблеру, а не пишешь на си - эта статья для тебя.

Почему многие пишут только на асме?

Когда-то давно это было вполне допустимо и считалось признаком мастерства. Во времена 32-битных систем это было вполне оправданно, но с приходом 64-битных, ассемблерщикам пришлось не сладко.
Разумеется, основные опкоды просто расширили DWORD до QWORD и стали занимать места на 4 байта больше. В 64-битном мире больше не нужны релоки, все относительные адреса помещаются в 4 байта!
Я постараюсь перечислить основные преимущества Си: как оказалось есть множество людей, которые не могут пересесть на новую лошадку, в силу страха неизвестного или предубеждений.
  1. Легкая компиляция как в 32 так и 64 битных файлов. Зачастую достаточно просто переключить режим сборки и если код написан правильно, он будет одинаково хорошо работать и там и там. Единственное ограничение - ассемблерные вставки, для 64 битных сборок их надо делать в отдельном файле.
  2. Больше хидеров. Каждый кто писал на асме знает - перегонять хидеры из msdn - неизбежное зло. На си они поставляются вместе с sdk или даже visual studio.
  3. Больше исходников. В силу того, что написав приложение используя только стандартную библиотеку си - оно будет кросплатформенно, исходников на си огромное множество. Больше не придется выдирать бинарные куски или переписывать алгоритмы с других языков.
  4. Классы, у Си с плюсами есть эта классная фишка. Они могут казаться чем-то подозрительным, но когда вы посмотрите как они выглядят в ассемблированном виде вы успокоитесь. Классы абсолютно не избыточны и не тормозят работу программы, но ускоряют разработку и облегчают понимание кода.
  5. Оптимизация. Коронная фишка ассемблера. Времена ms-dos давно прошли, никто не заметит лишнюю пару сотен процессорных тактов, да и ключи оптимизации компилятора позволят сильно срезать углы! На хабре обсуждалось какие ключи дают лучшую производительность, но скажу по секрету, что лучшую производительность даёт лучший алгоритм.
  6. Дебаг. Снова ставить int3 и ловить исключение в Olly? Нет, отладка в VisualStudio позволяет идти прямо по сишному коду, заглядывая в значение переменных, раскрывая вложенные структуры и даже подсматривая ассемблерный код!
  7. Скорость. Всё вышеизложенное приводит к ускорению рабочего цикла, от задумки до релиза. Ты думаешь о действительно важных вещах, а не о том какой выбрать регистр.
Для меня решающим фактором для перехода на Си и плюсы в частности послужил класс Cmem, который избавил меня от головной боли по поводу утечки памяти. Деструктор (функция вызываемая при выходе из области видимости экземпляра класса, по сути перед ret в функции) - освобождал мою память неявно и автоматически, чем полностью покорил моё сердце...

P/S Если вы тоже прошли долгий путь от "Пишу всё на ассемблере" до "Пересел на си", расскажите о нём в комментариях!
Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.
root@node:~$ SCAN_TARGET   // ACCESS_GRANTED   // ENUMERATE_AD   // PIVOT_INTERNAL   // TRACE_ATTACK_PATH   // SESSION_ACTIVE   // BYPASS_COMPLETE
0x04FF   // KERBEROS::ENUMERATE   // SHELL_READY   // PRIVILEGE_CHECK   // LATERAL_MOVE   // RED_TEAM   // TARGET_REACHED
ACCESS GRANTED root@node:~$ pivot --inside-net
ATTACKER VIEW
Знать, как выглядит защита, одно. Знать, как ее обходят, совсем другое. Именно здесь начинаются Red Team и пентест
RED TEAM
CyberED × SecurityLab.ru

VxLab

Blog о вирусных технологиях

Реклама 18+
Рекламодатель
Реклама. АО «Позитив Текнолоджиз». ИНН 7718668887. 18+
Сайт рекламодателя: ptsecurity.com
Реклама