Главная » Просмотр файлов » А.В. Ахо, М.С. Лам, Р. Сети, Дж. Д. Ульман - Компиляторы - принципы, технологии и инструментарий

А.В. Ахо, М.С. Лам, Р. Сети, Дж. Д. Ульман - Компиляторы - принципы, технологии и инструментарий (1114947), страница 220

Файл №1114947 А.В. Ахо, М.С. Лам, Р. Сети, Дж. Д. Ульман - Компиляторы - принципы, технологии и инструментарий (А.В. Ахо, М.С. Лам, Р. Сети, Дж. Д. Ульман - Компиляторы - принципы, технологии и инструментарий) 220 страницаА.В. Ахо, М.С. Лам, Р. Сети, Дж. Д. Ульман - Компиляторы - принципы, технологии и инструментарий (1114947) страница 2202019-05-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 220)

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

Ниже будет описано несколько важных его применений. 1076 Глава 12. Межпроцедурный анализ 12.2.1 Вызовы виртуальных методов Как уже упоминалось, объектно-ориентированные программы включают множество небольших методов. Если оптимизировать по одному методу за раз, то у нас будет слишком мало возможностей получить реальную выгоду от оптимизации. Языки программирования типа )аяа динамически загружают свои классы. В результате во время компиляции мы не знаем, какой из множества методов с именем гп будет реально вызван при использовании в коде вызова к.т ().

Многие реализации 1аяа используют оперативную компиляцию Опзь1п-йпе сошр1!ег) для компиляции байт-кода в процессе выполнения. Распространенной оптимизацией яшгяется профилирование выполнения и определение основных типов объектов — получателей сообщений. После этого можно встроить в код наиболее часто использующиеся методы. Соответствуюгций код включает динамическую проверку типа и выполняет встроенные методы, если объекты времени выполнения имеют ожидаемый тип.

Еще один подход к разрешению использований метода с именем ъв возможен при доступности в процессе компиляции всего исходного кода. Тогда для определения типов объектов оказывается возможным выполнение межпроцедурного анализа. Если оказывается, что возможный тип обьекта х единственный, то вызов х.т О разрешим во время компиляции. Нам точно известно, какой именно метод гп имеется в виду в данном контексте. В таком случае можно встроить код данного метода т без включения в код проверки типа зс 12.2.2 Анализ псевдонимов указателей Даже если мы не хотим выполнять межпроцедурные версии распространенных анализов потоков данных наподобие достигаюших определений, такие анализы все равно только выигрывают от применения межпроцедурного анализа указателей.

Все представленные в главе 9 анализы применимы только к локальным скалярным переменным, которые не могут иметь псевдонимов. Однако применение указателей широко распространено, в особенности в С-образных языках программирования. Знание того, что у указателя может быть псевдоним (айаз), может повысить точность методов, описанных в главе 9.

Пример 12.9. Рассмотрим последовательность из трех инструкций, которая мо- жет образовывать базовый блок: *р *с!= 2; х = *р; Без знания того, могут ли р и д указывать на одно и то же место в памяти, мы не в состоянии сказать, имеет ли х значение ! при выходе из базового блока. 1077 12.2. Необходимость межпроцедуриого анализа 12.2.3 Параллельность Как говорилось в главе 11, наиболее эффективный способ распараллеливания приложения заключается в поиске наиболее крупнозернистой параллельности, такой как параллельность во внешних циклах программы. В этом случае межпроцедурный анализ приобретает особую важность. Скалярная оптимизация (описанная в главе 9 и основанная на значениях простых переменных) существенно отличается от распараллеливания. В случае распараллеливания даже одна ложная зависимость данных может сделать нераспараллеливаемым весь цикл, существенно снизив тем самым эффективность оптимизации.

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

Те же методы могут использоваться и для анализа имеющегося программно~о обеспечения на наличие различных ошибок кодирования. Эти ошибки могуг сделать программы ненадежными; ряд ошибок могут сделать про)раммы уязвимыми для хакерских атак, позволяя хакерам взять управление вычислительной системой в свои руки. Статический анализ полезен при обнаружении многих распространенных ошибок.

Например, элемент данных должен быть защищен блокировкой. В качестве другого примера можно указать, что за запретом прерываний в операционной системе должно следовать их разрешение. Поскольку существенным источником ошибок являются несогласованности, пересекающие границы процедур, межпроцедурный анализ приобретает особую важность. Примерами инструментария, на практике эффективно использующего межпроцедурный анализ для поиска ошибок в больших программах, являются системы РКЕбх и Ме1а!.

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

Переходя к вопросу уязвимости программ, крайне желательно найти в программах все потенциальные ошибки. В 2006 году двумя "наиболее популярными" причинами вторжения, использовавшимися хакерами для взлома систем, были следующие. 1078 Глава !2. Межпроцедурный анализ !. Недостаточная проверка в %еЬ-приложениях. Одним из наиболее популярных видов использования такого рода уязвимых мест является ЯЯ1.-ввод, когда хакеры получают в свои руки управление базой данных при помощи манипулирования входными данными, передаваемыми %еЬ-приложениям. 2. Переполнение буфера в программах на языках программирования С и С+~-. Поскольку языки программирования С и С++ не выполняют проверки выхода за границы массивов, хакеры могут записать специально подобранные строки в не предназначенные для этого области и получить контроль над выполнением программы.

В следующем разделе мы рассмотрим применение межпроцедурного анализа для защиты программ от таких вторжений. 12.2.5 Я)Ь-ввод Под данным названием подразумевается уязвимость, заключающаяся в подборе хакером пользовательского ввода %еЬ-приложения и получение непредусмотренного доступа к базе данных. Например, банки предоставляют пользователям возможности выполнения транзакций в оперативном режиме при условии ввода корректного пароля. Обычно в такой системе пользователь вводит строки в %еЬ- форме, после чего эти строки используются как часть запроса к базе данных в языке 9 !! . Если разработчики системы не были аккуратны и осторожны, то строки, вводимые пользователем, могут изменить смысл ВО! -инструкции совершенно неожиданным способом.

Пример 12.10. Предположим, что банк предоставляет своим клиентам доступ к отношени о Асст!Эата(паве, раваиогс1, Ьа1апсе) Данное отношение представляет собой таблицу троек, каждая из которых состоит из имени клиента, пароля и баланса счета. Предполагается, что клиент может увидеть свой счет, только если он корректно введет свое имя и пароль. Если хакер сумеет увидеть эту информацию, это не самое худшее, что может произойти, но данный простой пример — типичная часть более сложных ситуаций, когда хакеры осуществляют платежи с чужих счетов.

Система может реализовывать запросы о состоянии счета следующим образом. !. Пользователи получают %еЬ-форму, в которой вводят свое имя и пароль. 2. Имя копируется в переменную п, а пароль — в переменную р. 1079 12,2. Необходимость межпроцелурного анализа 3. Позже, вероятно, в некоторой иной процедуре выполняется следующая ЯОЬ-инструкция: ЯЕЕЕСТ Ьа1апсе ГНОМ АсссЭага ХНЕНЕ паве = ':п' апс1 раяяиогс1 = ':р' Для читателей, не знакомых с ЯО1., переведем этот запрос на обычный язык; "Найти в таблице АсссРаса строку, первый компонент которой (имя) равен строке, находящейся в настоящий момент в переменной и, а второй компонент которой (пароль) равен строке, находящейся в настоящий момент в переменной р; вывести третий компонент 1баланс) этой строки".

Обратите внимание, что Я1 11. использует для строк одинарные, а не двойные кавычки, а двоеточия перед и и р указывают, что это переменные языка программирования, в программе на котором использован данный Я1 11.-запрос. Предположим, что хакер, желающий получить сведения о счете Чарльза Диккенса, передает переменным и и р следующие строки: и = СЬаг1ея Шс1сепя' --, р = иЬо сагея. Эти странные строки превращают запрос в ЯЕЕЕСТ Ьа1апсе ГНОМ АссгРаГа ХНЕНЕ паве = 'СЬаг1ея Шс1сепя' --' апс1 раненого = 'иЬо сагея' Во многих системах баз данных последовательность "--" представляет собой начало комментария и делает все, следующее за ней, комментарием. В результате получившийся запрос теперь просит вывести балансы всех клиентов по имени ' СЬаг1ея ОТскепя', независимо от используемого пароля.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6417
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее