Need Help! Исключение при выполнении шеллкода
От: mav123  
Дата: 27.09.10 10:31
Оценка:
Из ядра выделяю память в юзермодном процессе


            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 не работает.

Как можно узнать стоит атрибут на исполнение или нет?
Может быть еще что то надо?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.