Скачать http://wormholetravel.net/darkside.html
История языков программирования
коротка, но динамична. Еще не так давно передовым считался язык ассемблера. Но
с тех пор программирование прошло длинный путь, на котором обогатилось новыми
идеями и технологиями: от объектов до инструментов визуального
программирования. Сегодня существует три основных парадигмы программирования:
процедурная (например, C и Pascal), функциональная (Lisp и ML) и
объектно-ориентированная (Java, C++ и Smalltalk). Логическое или декларативное
программирование (например, Prolog) остается уделом академических исследований. Каждая парадигма знаменует
собственный подход к решению задач. Процедурную программу можно рассматривать
как последовательность инструкций, которые на каждом шаге модифифицируют
данные, размещенные в определенных ячейках памяти. Такие программы содержат конструкции
для повторения, например, циклы и процедуры. Функциональную программу можно
представлять себе как набор функций над заданными исходными данными. В истинно
функциональных программах нет присваиваний переменным; для получения требуемого
результата достаточно одних лишь списков и функций.
Объектно-ориентированные программы организованы в классы.
Экземпляры классов, именуемые объектами, содержат данные и методы, выполняющие
те или иные действия над этими данными. Объекты взаимодействуют, посылая друг другу
сообщения, в которых содержатся запросы на выполнение определенных действий.
Понимать
особенности языков программирования необходимо как прикладным программистам,
так и специалистам по безопасности, занятым тестированием приложений. У каждого
языка есть специфические характеристики, которые нужно учитывать при попытке
взлома программы. Например, программисты, привыкшие писать «эксплойты»,
основанные на переполнении буфера в программах на языке C, могут впасть в
растерянность, когда для аудита будет представлено приложение, написанное на
Java. Прочитав эту главу, вы получите общее представление о такого рода
аспектах безопасности, связанных с ними рисках и о том, какие дефекты возможны
в программах на
языках C, C++, Java и C#. На заре распространения операционной системы UNIX в
конце 60-х и в 70-х годах на авансцену вышли интерпретируемые языки, призванные
сократить время разработки небольших задач. Они позволяли энтузиастам программирования
создавать сценарии, то есть наборы интерпретируемых инструкций, которые
компьютер мог выполнить. Такие утомительные проблемы как управление памятью и
работа с низкоуровневыми системными командами, теперь выполнялись «за
кулисами», что позволило снизить сложность и объем кода, необходимого для
решения конкретной задачи. Безусловно, языки сценариев стали мечтой ленивого
программиста.
Почитаемым
предком всех интерпретируемых языков является язык управления заданиями (JCL –
job control language). В системе OS/360 этот язык использовался для организации
данных, поступающих с перфокарт, в пригодные для работы наборы символов. Если
принять во внимание возможности языка и его примитивную природу, то накладные
расходы были просто гигантскими. Первым получившим широкое распространение
языком сценариев стал язык интерпретатора команд sh в системе UNIX.
Первоначально он предназначался для администраторов и позволял быстро создавать сценарии
для управления сетью и системой в целом. По мере того как производительность и
функциональность платформы росла безумными темпами, число интерпретируемых
языков превысило число полномасштабных компилируемых языков программирования.
Сценарии превратились в весьма развитую технологию, свидетельством чему могут служить
широкие возможности, заложенные в такие языки, как PHP, Python, Perl и Javascri
pt. Современные языки сценариев уже содержат объектно-ориентированные средства,
создание классов, управление памятью, создание сокетов, рекурсию, динамические
массивы и регулярные выражения. Есть даже интерпретируемые языки, позволяющие
разрабатывать графические интерфейсы, например, популярный язык TCL/Tk. В этой
главе вы познакомитесь как с уникальными, так и с общими для разных языков
средствами и узнаете о некоторых приемах, применяемых профессионалами.
Комментариев нет:
Отправить комментарий