Функция в массиве BYTE прямо в память? - PullRequest
0 голосов
/ 09 октября 2011

Можно ли выделить виртуальную память для байтового массива, содержащего функцию, записать массив в память и затем каким-либо образом выполнить функцию в виртуальной памяти?

1 Ответ

0 голосов
/ 09 октября 2011

Вы должны быть уверены, что байты, которые вы собираетесь выполнить, действительно являются допустимой последовательностью инструкций ЦП, иначе «функция» обязательно вылетит, например, вызовет исключения «недопустимая инструкция», «нарушение доступа» и т. Д.

Следующее, что нужно сделать, это убедиться, что рассматриваемые байты находятся в памяти, которая имеет привилегию выполнения. VirtualProtect с PAGE_EXECUTE получите это.

Тогда вы фактически должны передать управление своей функции. Это может быть ассемблерный код, например push <address>; ret; или вызов стиля C ++ статической функции с адресом в переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...