сделать память с артибутом executable

Тема в разделе "WASM.NT.KERNEL", создана пользователем rain, 9 авг 2007.

  1. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    Мне нужно либо выделить либо просто изменить атрибуты уже имеющейся памяти (к примеру секции .data или стека).
    Насколько я понял универсального (документированного, межплатформенного) способа не существует. Выход в ручную искать pte и править.
    Поправте если не так, и если кто-то видел код, для любой платформы поделитесь )
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Я знаю только вариант для >= Win XP и связанный с геморроем:

    Код (Text):
    1. PVOID Buffer, MappedBuffer;
    2. PMDL Mdl;
    3.  
    4. Buffer = ExAllocatePool( NonPagedPool, 0x100 );
    5. if( Buffer )
    6. {
    7.   Mdl = IoAllocateMdl( Buffer, 0x100, 0, 0, 0 );
    8.   if( Mdl )
    9.   {
    10.     MmBuildMdlForNonPagedPool( Mdl );
    11.     MappedBuffer = MmMapLockedPages( Mdl, KernelMode );
    12.     if( MappedBuffer )
    13.     {
    14.       MmProtectMdlSystemAddress( Mdl, PAGE_EXECUTE_READWRITE );
    15.  
    16.       // MappedBuffer теперь исполняемый
    17.  
    18.       MmUnmapLockedPages( MappedBuffer, Mdl );
    19.     }
    20.     IoFreeMdl( Mdl );
    21.   }
    22.   ExFreePool( Buffer );
    23. }
     
  3. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    rain
    =)) Ты сам то понял что спросил ? если у тебя 32битная платфома. то там любая выделеная память readable, а соответственно и executable. или ты имеешь ввиду 64битную систему ?
     
  4. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    а как же ) кстати есть ещё и 32 битные платформы с хардварным депом кажется, так что лучше разложить всё по полочкам