Поведение VirtualProtect

Тема в разделе "WASM.WIN32", создана пользователем Mika0x65, 22 сен 2007.

  1. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Мое почтение всем.

    Заметил одну не совсем понятную вещь при использовании VirtualProtect. Вот упрощенная модель ситуации:

    Код (Text):
    1. format PE GUI
    2.  
    3. include 'win32a.inc'
    4.  
    5.  push str_ntdll
    6.  call [LoadLibraryA]
    7.  
    8.  push str_ki_usr_excpt_disp
    9.  push eax
    10.  call [GetProcAddress]
    11.  
    12.  and eax, 0xFFFFF000
    13.  sub esp, 0x4
    14.  push esp
    15.  push PAGE_EXECUTE_READWRITE
    16.  push 0x1
    17.  push eax
    18.  call [VirtualProtect]
    19.  add esp, 0x4
    20.  
    21. str_ki_usr_excpt_disp: db 'KiUserExceptionDispatcher', 0x0
    22. str_ntdll              db 'ntdll.dll', 0x0
    23.  
    24. data import
    25.  
    26.   library kernel32, 'KERNEL32.DLL'
    27.  
    28.   import kernel32,\
    29.          ExitProcess, 'ExitProcess',\
    30.          LoadLibraryA, 'LoadLibraryA',\
    31.          GetProcAddress, 'GetProcAddress',\
    32.          VirtualProtect, 'VirtualProtect',\
    33.          GetLastError, 'GetLastError'
    34.  
    35. end data
    Вызов VirtualProtect в этом коде завершается ошибкой 0x00000005 (Access Denied). Однако, если убрать 'and eax, 0xFFFFF000' перед вызовом ф-ии, то все Ок. Посмотрел в Olly карту памяти, вроде, при округлении адреса за границы образа ntdll.dll не выхожу. В чем может быть дело?

    Заранее благодарен.
     
  2. rain

    rain New Member

    Публикаций:
    0
    У меня твой код (с and eax, fffff000h) отработал нормально, первое (и самое бредовое) что приходит в голову может страници по 2К?(вроде где-то читал что и такое бывает) попробуй поигаться с границей и посмотри начиная с какого интервала возвращает ошибку
     
  3. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    rain
    Я думаю, что ты путаешь со страницами 2 MB (это при включенном PAE). +страницы бывают 4 MB (при включенном PSE и установленном флаге PS в PDE).

    А какая у тебя версия Win? Забыл написать, у меня MS XP Professional, SP2.
     
  4. rain

    rain New Member

    Публикаций:
    0
    да вроде такое в природе есть только на редких архитектурах
    протестил щас на хр sp1 x64 (wow ессесно), w2k3 sp1, w2k sp4 везде работает)