Мне нужно либо выделить либо просто изменить атрибуты уже имеющейся памяти (к примеру секции .data или стека). Насколько я понял универсального (документированного, межплатформенного) способа не существует. Выход в ручную искать pte и править. Поправте если не так, и если кто-то видел код, для любой платформы поделитесь )
Я знаю только вариант для >= Win XP и связанный с геморроем: Код (Text): PVOID Buffer, MappedBuffer; PMDL Mdl; Buffer = ExAllocatePool( NonPagedPool, 0x100 ); if( Buffer ) { Mdl = IoAllocateMdl( Buffer, 0x100, 0, 0, 0 ); if( Mdl ) { MmBuildMdlForNonPagedPool( Mdl ); MappedBuffer = MmMapLockedPages( Mdl, KernelMode ); if( MappedBuffer ) { MmProtectMdlSystemAddress( Mdl, PAGE_EXECUTE_READWRITE ); // MappedBuffer теперь исполняемый MmUnmapLockedPages( MappedBuffer, Mdl ); } IoFreeMdl( Mdl ); } ExFreePool( Buffer ); }
rain =)) Ты сам то понял что спросил ? если у тебя 32битная платфома. то там любая выделеная память readable, а соответственно и executable. или ты имеешь ввиду 64битную систему ?
а как же ) кстати есть ещё и 32 битные платформы с хардварным депом кажется, так что лучше разложить всё по полочкам