интересно. пытаюсь реализовать на MASM. делаю так: Код (Text): mov esi, lpModule invoke OpenProcess, ... test eax, eax jz _thr_resume mov hProcess, eax assume fs : nothing push ebp push esp push offset _next_code push offset InThreadSEH push fs : [0] mov fs : [0], esp in al, 2 _next_code: .... обработчик: Код (Text): InThreadSEH proc uses edx pExcept, pFrame, pContext, pDispatch : DWORD mov edx, pFrame assume edx : ptr SEH mov eax, pContext assume eax : ptr CONTEXT push [edx].SafeOffset pop [eax].regEip push [edx].PrevEsp pop [eax].regEsp push [edx].PrevEbp pop [eax].regEbp ; GetExceptionCode mov eax, dword ptr [ebp - 14] mov eax, dword ptr [eax] mov eax, dword ptr [eax] sub eax, STATUS_PRIVILEGED_INSTRUCTION add hProcess, eax mov eax, ExceptionContinueExecution ret InThreadSEH endp но результата нет. что я делаю не правильно? благодарю за внимание
ошибка происходит здесь Код (Text): ; GetExceptionCode mov eax, dword ptr [ebp - 14] mov eax, dword ptr [eax] ; <----!!!!!!!!! mov eax, dword ptr [eax]
sideX Код (Text): GET_CURRENT_GRAPH_ENTRY macro Call _$_GetCallbackReference endm SEH_Prolog proc C pop ecx push ebp push eax Call SEH_GetRef push eax assume fs:nothing push dword ptr fs:[TEB.Tib.ExceptionList] mov dword ptr fs:[TEB.Tib.ExceptionList],esp jmp ecx SEH_Prolog endp SEH_Epilog proc C pop ecx pop dword ptr fs:[TEB.Tib.ExceptionList] lea esp,[esp + 3*4] jmp ecx SEH_Epilog endp SEH_GetRef proc C GET_CURRENT_GRAPH_ENTRY mov eax,dword ptr [esp + 4] mov esp,dword ptr [esp + 2*4] ; (esp) -> ExceptionList mov eax,EXCEPTION_RECORD.ExceptionCode[eax] mov ebp,dword ptr [esp + 3*4] jmp dword ptr [esp + 2*4] SEH_GetRef endp _$_GetCallbackReference:: pop eax ret Юзаем таким образом: Код (Text): Call SEH_Epilog_Reference Call SEH_Prolog ... jmp Exit SEH_Epilog_Reference: GET_CURRENT_GRAPH_ENTRY Exit: Call SEH_Epilog При сепшене поимеем в регистре Eax код его, в вашем случае STATUS_PRIVILEGED_INSTRUCTION. Хотя ваше решение выглядит бредовым.