![]() |
eXeL@B —› Вопросы новичков —› Различие у ZwAllocateVirtualMemory на 7 и хп. |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 13 января 2017 23:37 · Поправил: mazaxaker · Личное сообщение · #1 Пробую выделить память по нулевым адресам, на хп выделяет, а на 7 возвращает 0xC00000F0=STATUS_INVALID_PARAMETER_2 Пробую так: Code:
Почему-то если адрес меньше 10000 (подсмотрел в virtualalloc), то на 7 отказывает в памяти там. Отключил DEP, думал он тут мешает, но и с отключенным не выдает так память. Как бы узнать, почему на 7 отказывает по нулевому адресу выдать память, пробовал windbg, но он почему-то проскакивает sysenter. Кстати исходников нету этих ntdll ?) ![]() |
|
Создано: 26 января 2017 22:46 · Личное сообщение · #2 |
|
Создано: 13 февраля 2017 04:29 · Поправил: difexacaw · Личное сообщение · #3 Может не совсем по теме, но это важный момент. Нет ядра старших версий что бы посмотреть, но в 8-ке введена следующая проверка. При вызове аллокатора проверяется валидность стека: TEB.DeallocationStack <= rEsp < TEB.StackBase Где StackBase это верхний предел стека, DeallocationStack это базовый адрес его(но не текущий нижний предел TEB.StackLimit). Если при такой проверке окажется что указатель стека находится не в указанных пределах, разворачивается исключение #STATUS_STACK_BUFFER_OVERRUN и процесс завершается. Это обламает переключение стека, без должной поправки в TEB. Введено для детекта ROP-переключения стека на код. ![]() ----- vx ![]() |
<< . 1 . 2 . |
![]() |
eXeL@B —› Вопросы новичков —› Различие у ZwAllocateVirtualMemory на 7 и хп. |