![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Изменение кода при выполнении программы
programania © (2004-10-05 18:34:00)Можно ли изменить код процедуры во время работы программы?
Если менять массив размещенный по адресу этой
процедуры происходит защита доступа хотя в массиве видно
что там тот же код что и в окне CPU у этой процедуры.
Или можно ли запустить выполнение кода из массива?
если переменной типа процедура присвоить адрес этого массива,
в массив записать код другой процедуры того же типа
и вызвать ее: опять защита доступа.
Anatoly Podgoretsky (2004-10-06 13:25:00) [1]Sha © (06.10.04 13:21) [7]
Туда им и дорога.
Sha (2004-10-06 13:21:00) [2]> wicked © (06.10.04 12:51) [6]
Неужели MS не даст исполнять код на стеке?
Много программ пострадает :(
wicked (2004-10-06 12:51:00) [3]> Digitman [4]
так и знал, что кто-то посоветует.... :)
остается сказать - читайте описание 2-го сервис пака для WinXP....
Sha (2004-10-06 10:18:00) [4]Digitman © (06.10.04 08:59) [4]
Добавлю, что такой вариант работает иногда медленнее.
И добавляет проблем отладчику :)
Digitman (2004-10-06 08:59:00) [5]
> можно ли запустить выполнение кода из массива?
если массив разместить в стеке, то выполнить маш.инструкции, размещенные в массиве, можно и безо всяких доп.ухищрений, благо страницы стека имеют привелегии доступа PAGE_EXECUTE_READWRITE
Суслик (2004-10-05 19:01:00) [6]Думаю, что можно попробовать взять адрес процедуры, используя VirtualQuery узнать базовый адрес блока, затем через VirtualProtect сменить уровень защиты, изменить код.
Я бы начал с этого...
Sha (2004-10-05 19:01:00) [7]> programania © (05.10.04 18:34)
VirtualProtect
PAGE_EXECUTE_READWRITE
FlushInstructionCache
Суслик (2004-10-05 18:50:00) [8]Я такое не делал, но думаю можно.
Я бы стал рыть в сторону использования функции VirtualProtect и родественных ей.
Я не помню какие ограничения у этой функции. Думаю, что на данный вопрос может замечательно ответить книга Рихтера, windows для профи - глава про управление памятью. Или msdn можно посмотреть.