PSR1257 IDT, GDT etc. локальны для процессора и эта память отслеживается защитой. Не юзабельно. Нужна глобальная область памяти общая для всех процессоров.
простой вариант - в малоиспользуемом поле EPROCESS системного процесса. насколько я помню память под объекты - NonPagable, так что с irql проблем не будет.
n0name Тоже была такая идея. Это гораздо хуже, чем использование PCR, где переменные адресуются просто регистром Fs.
А если хранить в каких нибудь устройствах? Допустим куданить временно сохранить cmos память и юзать её) или память какихнить других устройств. Допустим видеопамять.
slesh Обращение к устройствам не морфится, если они не отображены в память. Тоесть инструкцию In нельзя заменить на аналоги. Достаточно нескольких таких инструкций для создания сигнатуры. Работа должна выполняться только с памятью.
Ну а если генерить в памяти нужные инстукции и поочередно вызывать их? Допустим хотябы с томже стеке генерить. типа push xxxxxxxx push xxxxxxxx ********* add [esp], yyyyyyyy xor [esp+4], yyyyyyyy и так далее а потом просто передавать управления туда. когда нужны определенные команды, а потом опять запирать всё после использования. Конечно могут быть проблемы с ошибкой выполнения данных. но под ядром этоже можно решить
slesh Тоесть для извлечения ссылки вызывается код из буфера, где он собран. Но необходима ссылка на буфер.
Clerk По условию вашей задачи вы не знаете где хранить ссылку на переменные, но при этом подразумевается что вы уже как бы знаете где хранить эти самые переменные, то есть их адресс, странно... помоему ответ напрашивается сам собой - в коде, и больше нигде.
Charlief Определитесь что есть адрес. В моём примере смещение в сегменте постоянно, изменяется база сегмента, причём адрес его не имеет значения(прим. база, не используется непосредственно).
Значит ссылка должна находиться по постоянному смещению в заранее известном сегменте, а данные в другом сегменте или в том же но по заранее неизвестному смещению ? То есть ваш код сохраняет в ссылке смещение данных (на этом этапе код знает смещение ссылки и смещение данных), потом мутирует и на этом этапе он теряет смещение данных но не теряет смещение ссылки ? А нельзя ли так сделать наоборот чтобы код потерял смещение ссылки но не данных, и тогда надобность в ссылке отпадёт.
Charlief Нужна глобальная переменная, адресация которой не изменяется при морфинге и расположена за пределами кода.
Теперь понятно, так бы сразу и сказали что не знаете где хранить сами переменные, а не ссылки на них. Структура OBJECT_HEADER - поля обединения PQUOTA_BLOCK (POBJECT_CREATE_INFO) и PSECURITY_DESCRIPTOR у некоторых объектов могут быть равны нулю, то есть не использоваться если соответствующие флаги в этой структуре не установлены. Вот берите и занимайте свободное место. Ага, вот и n0name сказал: "память под объекты - NonPagable, так что с irql проблем не будет". Плюс байтовые поля смещений неиспользуемых структур заголовка обьекта. И что значит "Это гораздо хуже, чем использование PCR, где переменные адресуются просто регистром Fs." ? - Что бы только с помощью Fs - это же нужно целый отдельный сегмент, а вы сами написали: "IDT, GDT etc. локальны для процессора и эта память отслеживается защитой. Не юзабельно. Нужна глобальная область памяти общая для всех процессоров."