SHARE
TWEET

Prefetch Input Queue (PIQ)

waliedassar Sep 15th, 2012 124 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //This function can be used to detect whether the processor still supports PIQ (Prefetch Input Queue).
  2. //At the time all processors supported PIQ, this was used as an anti-tracing trick.
  3. #include "stdafx.h"
  4. #include "windows.h"
  5. #include "iostream.h"
  6.  
  7.  
  8. bool IsPIQSupported()
  9. {
  10.         unsigned long old;
  11.         void* addr=0;
  12.         //-----------Get EIP----------------
  13.         unsigned long result=0;
  14.         __asm
  15.         {
  16.                      pushad
  17.                      call here
  18. here:
  19.                          pop ebx
  20.                          mov addr,ebx
  21.                          popad
  22.         }
  23.        
  24.         //-------------------------Allow Write Access-----------------------
  25.         VirtualProtect(addr,100,PAGE_EXECUTE_READWRITE,&old);
  26.         //-------------------------Check for support------------------------
  27.         __asm
  28.         {
  29.                      pushad
  30.              XOR EAX,EAX
  31.              XOR ECX,ECX
  32.                          MOV AL,0x40
  33.              MOV CL,0x6
  34.              MOV EDI,offset shit
  35.              STD
  36.              REP STOS BYTE PTR ES:[EDI]
  37.                          NOP
  38.              NOP
  39.              NOP
  40. shit:
  41.              NOP
  42.                          CLD
  43.                          mov result,eax
  44.                          popad
  45.         };
  46.     //----------------------Restore Original-----------------------
  47.         VirtualProtect(addr,100,old,&old);
  48.         if(result==0x44) return true;
  49.         return false;
  50. }
  51.  
  52.  
  53.  
  54.  
  55. int main(int argc, char* argv[])
  56. {
  57.         unsigned long old;
  58.         void* addr=0;
  59.         if(IsPIQSupported())
  60.         {
  61.                 cout<<"PIQ is supported"<<endl;
  62.         }
  63.         else
  64.         {
  65.                 cout<<"PIQ is not supported"<<endl;
  66.         }
  67.         return 0;
  68. }
RAW Paste Data
Want to get better at C?
Learn to code C in 2017
Pastebin PRO Summer Special!
Get 40% OFF on Pastebin PRO accounts!
Top