Ассемблерные извращения - натягиваем стек

Металлические конструкции усиление металлоконструкции Прокопьевске и пригороде. | Выполним демонтаж металлокаркас в Нижнем Новгороде и пригороде. Металлоконструкции на заказ.

Листинг 6 передача и использование аргументов при раздельных стеках - часть 2


Естественно, все, сказанное выше, относится _только_ к нашим собственным функциям, а API-функции операционной системы таких извращений не понимают и ожидают аргументов в "стандартном" стеке. Ну… что тут можно сказать… "Персонально" для API-функций аргументы можно передать и в стандартном стеке, предварительно убедившись, что при данных аргументах функция гарантированно не вызовет переполнения (что вовсе не факт, особенно при работе с функциями из библиотеки mshtml.dll). К тому же, в 64-битной редакции Windows аргументы API-функциями в большинстве случаев передаются не через стек, а через регистры, поэтому описанная методика к ним вполне применима.

А вот как защитить от переполнения функции обычных библиотек? Самое простое решение — вызвать функции не по CALL, а по JMP, разместив адрес возврата на вершине страницы памяти, доступной только на чтение. Ниже ее будут только аргументы (доступные так же только на чтение), а вот локальные переменные, создаваемые функцией будут доступны и на чтение и на запись. Естественно, этот трюк будет работать только с теми функциями, которые не изменяют своих аргументов (а многие из них изменяют их только так), но по другому просто не получается!




Начало  Назад  Вперед



Книжный магазин