Из ядра выделяю память в юзермодном процессе
PMDL pMdl = NULL;
BYTE *pVirtualMemory = NULL;
PHYSICAL_ADDRESS phBegin,phEnd,phSkip;
phBegin.QuadPart = 0;
phEnd.QuadPart = (LONGLONG)-1;
phSkip.QuadPart = 0;
DWORD dwAllocationSize;
__try
{
pMdl = MmAllocatePagesForMdl(phBegin, phEnd, phSkip, 0x1000);
DBGPRINT(("ImageLoadNotifyRoutine MmAllocatePagesForMdl %X\r\n", pMdl));
if (pMdl)
{
dwAllocationSize = MmGetMdlByteCount(pMdl);
if (dwAllocationSize >= 0x60)
{
pVirtualMemory = (BYTE *)MmMapLockedPagesSpecifyCache(pMdl, UserMode, MmCached, 0, FALSE, NormalPagePriority);
DBGPRINT(("ImageLoadNotifyRoutine MmMapLockedPagesSpecifyCache %X\r\n", pVirtualMemory));
if (pVirtualMemory)
{
Но почему-то при попытке вызова моего шеллкода выпадает эксепшен.
т.е. в дебагере я вижу что управление передается на мой код —
001b:00030004 8bec mov ebp,esp
но при нажатии F11 (шаг) выпадает в ntdll!KiUserExceptionDispatcher
С чем это может быть связано? Может быть с тем что страница памяти не помечена как выполянемая? И как это узнать из WinDbg? Пробовал через "!address" но это расширение под Win7 не работает.
Как можно узнать стоит атрибут на исполнение или нет?
Может быть еще что то надо?