Guest User

Untitled

a guest
Sep 14th, 2011
1,202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. char __cdecl PsValidateUserStack()
  2. {
  3. char Status; // al@1
  4. _KTRAP_FRAME *TrapFrame; // ecx@3
  5. _TEB *Teb; // ecx@3
  6. void *.Eip; // [sp+10h] [bp-88h]@3
  7. unsigned int .Esp; // [sp+14h] [bp-84h]@3
  8. void *StackLimit; // [sp+18h] [bp-80h]@3
  9. void *StackBase; // [sp+1Ch] [bp-7Ch]@3
  10. _EXCEPTION_RECORD ExitStatus; // [sp+24h] [bp-74h]@6
  11. CPPEH_RECORD ms_exc; // [sp+80h] [bp-18h]@3
  12.  
  13. CurrentThread = (_ETHREAD *)__readfsdword(0x124u);
  14. Status = LOBYTE(CurrentThread->Tcb.___u42.UserAffinity.Reserved[0]);// // PreviousMode == User
  15. if ( Status )
  16. {
  17. __asm { bt dword ptr [edx+58h], 13h } // // KernelStackResident, ReadyTransition, Alertable
  18. Status = _CF;
  19. if ( _CF != 1 )
  20. {
  21. TrapFrame = CurrentThread->Tcb.TrapFrame;
  22. .Esp = TrapFrame->HardwareEsp;
  23. .Eip = (void *)TrapFrame->Eip;
  24. Teb = (_TEB *)CurrentThread->Tcb.Teb;
  25. ms_exc.disabled = 0;
  26. StackLimit = Teb->DeallocationStack;
  27. StackBase = Teb->NtTib.StackBase;
  28. ms_exc.disabled = -2;
  29. Status = .Esp;
  30. if ( .Esp < (unsigned int)StackLimit || .Esp >= (unsigned int)StackBase )
  31. {
  32. memset(&ExitStatus, 0, 0x50u);
  33. ExitStatus.ExceptionCode = STATUS_STACK_BUFFER_OVERRUN;
  34. ExitStatus.ExceptionAddress = .Eip;
  35. ExitStatus.NumberParameters = 2;
  36. ExitStatus.ExceptionInformation[0] = 4;
  37. ExitStatus.ExceptionInformation[1] = .Esp;
  38. Status = DbgkForwardException(&ExitStatus, 1, 1);
  39. if ( !Status )
  40. {
  41. Status = DbgkForwardException(&ExitStatus, 0, 1);
  42. if ( !Status )
  43. Status = ZwTerminateProcess((HANDLE)0xFFFFFFFF, ExitStatus.ExceptionCode);
  44. }
  45. }
  46. }
  47. }
  48. return Status;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment