Recent Posts
None | 2 sec ago
None | 4 sec ago
C++ | 12 sec ago
None | 56 sec ago
C | 1 min ago
None | 1 min ago
None | 1 min ago
C | 1 min ago
None | 1 min ago
None | 2 min ago
Sitereport
Find cool info about any domain on the internet?
visit sitereport
Free Subdomains
Want a pastebin.com sub-domain for your community?
learn more...
What is pastebin?
Pastebin is a website that hosts all your text & code on dedicated servers for easy sharing.
learn more...
Learn a little bit about the new Pastebin.com on our help page. hide message
By bugaga on the 4th of Jul 2009 07:32:57 AM Download | Raw | Embed | Report
  1. unit IntUnit;
  2. interface
  3.           uses DrvUnit;
  4. type
  5.  
  6. TReg = packed record
  7. // POPAD - stored reg's
  8.   edi,esi,ebp,Resp:integer;
  9. // UNION EBX
  10.   case byte of
  11.   1:(bl,bh:byte;__1:word);
  12.   2:(bx:word;   __2:word);
  13.   3:(ebx:integer;
  14. // UNION EDX
  15.   case byte of
  16.   1:(dl,dh:byte;__3:word);
  17.   2:(dx:word;   __4:word);
  18.   3:(edx:integer;
  19. // UNION ECX
  20.   case byte of
  21.   1:(cl,ch:byte;__5:word);
  22.   2:(cx:word;   __6:word);
  23.   3:(ecx: integer;
  24. // UNION EAX
  25.   case byte of
  26.   1:(al,ah:byte;__7:word);
  27.   2:(ax:word;   __8:word);
  28.   3:(eax:integer;
  29. // CPU self-stored reg's
  30.   eip,cs:integer;
  31.   case byte of
  32.   1:(flags:word;flagsMi,flagsHi:byte);
  33.   2:(efl,esp,ss,es,ds,fs,gs:integer)))));
  34. end;
  35.  
  36. procedure HookIDT(DispHnd:pointer);
  37. procedure UnHookIDT();
  38.  
  39. implementation
  40. var
  41.   DispathHnd:pointer;
  42.   IDT    :^TIDT64;
  43.   OldIDT : TIDT64;
  44.  
  45. procedure IDTHook; forward;
  46.  
  47. procedure rise;
  48. asm cli
  49.     xchg eax,[esp] //store eax, get except num
  50.     push ecx
  51. //
  52.     push edx   // dump general reg's
  53.     push ebx
  54.     push esp  
  55.     push ebp    
  56.     push esi
  57.     push edi
  58. //
  59.     mov  edx, eax
  60.     mov  eax, $CCCCCCCD
  61.     sub  edx, offset IDTHook+5
  62.     mul  edx
  63. //
  64.     mov  edx,esp
  65.     call DispathHnd
  66. //
  67.     popad    
  68.     iretd
  69. end;
  70.  
  71. procedure risX;//excpt w/err code
  72. asm cli               //NUM <-STACK
  73.     mov [esp+4],eax   //ERROR CODE
  74.     pop  eax          //EIP
  75.     xchg eax,[esp]        
  76.     jmp  rise
  77. end;
  78.  
  79. procedure IDTHook;
  80. begin
  81.     rise(*00*); // Divide Error
  82.     rise(*01*); // Debug Exception
  83.     rise(*02*); // NMI Interrupt
  84.     rise(*03*); // Breakpoint
  85.     rise(*04*); // INTO-detected Overflow
  86.     rise(*05*); // BOUND Range Exceeded
  87.     rise(*06*); // Invalid Opcode
  88.     rise(*07*); // Device Not Available
  89.     risX(*08*); // Double Fault
  90.     risX(*09*); // CoProcessor Segment Overrun (reserved)
  91.     risX(*0A*); // Invalid Task State Segment
  92.     risX(*0B*); // Segment Not Present
  93.     risX(*0C*); // Stack Fault
  94.     risX(*0D*); // General Protection
  95.     risX(*0E*); // Page Fault
  96.     rise(*0F*); // Intel reserved. Do not use
  97.     rise(*10*); // Floating-Point Error
  98.     risX(*11*); // Alignment Check
  99.     risX(*12*); // Machine Check
  100.     rise(*13*); // XMM
  101.     rise(*14*); rise(*15*); rise(*16*); rise(*17*);
  102.     rise(*18*); rise(*19*); rise(*1A*); rise(*1B*);
  103.     rise(*1C*); rise(*1D*); rise(*1E*); rise(*1F*);
  104.  
  105.     rise(*20*); rise(*21*); rise(*22*); rise(*23*);
  106.     rise(*24*); rise(*25*); rise(*26*); rise(*27*);
  107.     rise(*28*); rise(*29*); rise(*2A*); rise(*2B*);
  108.     rise(*2C*); rise(*2D*); rise(*2E*); rise(*2F*);
  109.  
  110.     rise(*30*); rise(*31*); rise(*32*); rise(*33*);
  111.     rise(*34*); rise(*35*); rise(*36*); rise(*37*);
  112.     rise(*38*); rise(*39*); rise(*3A*); rise(*3B*);
  113.     rise(*3C*); rise(*3D*); rise(*3E*); rise(*3F*);
  114.  
  115.     rise(*40*); rise(*41*); rise(*42*); rise(*43*);
  116.     rise(*44*); rise(*45*); rise(*46*); rise(*47*);
  117.     rise(*48*); rise(*49*); rise(*4A*); rise(*4B*);
  118.     rise(*4C*); rise(*4D*); rise(*4E*); rise(*4F*);
  119.  
  120.     rise(*50*); rise(*51*); rise(*52*); rise(*53*);
  121.     rise(*54*); rise(*55*); rise(*56*); rise(*57*);
  122.     rise(*58*); rise(*59*); rise(*5A*); rise(*5B*);
  123.     rise(*5C*); rise(*5D*); rise(*5E*); rise(*5F*);
  124.  
  125.     rise(*60*); rise(*61*); rise(*62*); rise(*63*);
  126.     rise(*64*); rise(*65*); rise(*66*); rise(*67*);
  127.     rise(*68*); rise(*69*); rise(*6A*); rise(*6B*);
  128.     rise(*6C*); rise(*6D*); rise(*6E*); rise(*6F*);
  129.  
  130.     rise(*70*); rise(*71*); rise(*72*); rise(*73*);
  131.     rise(*74*); rise(*75*); rise(*76*); rise(*77*);
  132.     rise(*78*); rise(*79*); rise(*7A*); rise(*7B*);
  133.     rise(*7C*); rise(*7D*); rise(*7E*); rise(*7F*);
  134.  
  135.     rise(*80*); rise(*81*); rise(*82*); rise(*83*);
  136.     rise(*84*); rise(*85*); rise(*86*); rise(*87*);
  137.     rise(*88*); rise(*89*); rise(*8A*); rise(*8B*);
  138.     rise(*8C*); rise(*8D*); rise(*8E*); rise(*8F*);
  139.  
  140.     rise(*90*); rise(*91*); rise(*92*); rise(*93*);
  141.     rise(*94*); rise(*95*); rise(*96*); rise(*97*);
  142.     rise(*98*); rise(*99*); rise(*9A*); rise(*9B*);
  143.     rise(*9C*); rise(*9D*); rise(*9E*); rise(*9F*);
  144.  
  145.     rise(*A0*); rise(*A1*); rise(*A2*); rise(*A3*);
  146.     rise(*A4*); rise(*A5*); rise(*A6*); rise(*A7*);
  147.     rise(*A8*); rise(*A9*); rise(*AA*); rise(*AB*);
  148.     rise(*AC*); rise(*AD*); rise(*AE*); rise(*AF*);
  149.  
  150.     rise(*B0*); rise(*B1*); rise(*B2*); rise(*B3*);
  151.     rise(*B4*); rise(*B5*); rise(*B6*); rise(*B7*);
  152.     rise(*B8*); rise(*B9*); rise(*BA*); rise(*BB*);
  153.     rise(*BC*); rise(*BD*); rise(*BE*); rise(*BF*);
  154.  
  155.     rise(*C0*); rise(*C1*); rise(*C2*); rise(*C3*);
  156.     rise(*C4*); rise(*C5*); rise(*C6*); rise(*C7*);
  157.     rise(*C8*); rise(*C9*); rise(*CA*); rise(*CB*);
  158.     rise(*CC*); rise(*CD*); rise(*CE*); rise(*CF*);
  159.  
  160.     rise(*D0*); rise(*D1*); rise(*D2*); rise(*D3*);
  161.     rise(*D4*); rise(*D5*); rise(*D6*); rise(*D7*);
  162.     rise(*D8*); rise(*D9*); rise(*DA*); rise(*DB*);
  163.     rise(*DC*); rise(*DD*); rise(*DE*); rise(*DF*);
  164.  
  165.     rise(*E0*); rise(*E1*); rise(*E2*); rise(*E3*);
  166.     rise(*E4*); rise(*E5*); rise(*E6*); rise(*E7*);
  167.     rise(*E8*); rise(*E9*); rise(*EA*); rise(*EB*);
  168.     rise(*EC*); rise(*ED*); rise(*EE*); rise(*EF*);
  169.  
  170.     rise(*F0*); rise(*F1*); rise(*F2*); rise(*F3*);
  171.     rise(*F4*); rise(*F5*); rise(*F6*); rise(*F7*);
  172.     rise(*F8*); rise(*F9*); rise(*FA*); rise(*FB*);
  173.     rise(*FC*); rise(*FD*); rise(*FE*); rise(*FF*);
  174. end;
  175.  
  176. procedure HookIDT(DispHnd:pointer);
  177. var
  178.    i:integer;
  179. begin cli();
  180.       IDT := GetIDT();
  181.  
  182.    for i:= 0 to $FF do begin
  183.       OldIDT[i] := IDT[i];
  184.       IDT[i] := A32ToV64(integer(@IDTHook)+i*5);
  185.    end;
  186.    DispathHnd := DispHnd;
  187. end;
  188.  
  189. procedure UnHookIDT;
  190. var
  191.    i:integer;
  192. begin cli();
  193.  
  194.   for i := 0 to $FF do
  195.       IDT[i] := OldIDT[i];
  196. end;
  197.  
  198. end.
Submit a correction or amendment below. Make A New Post
To highlight particular lines, prefix each line with @h@
Syntax highlighting:
Post expiration:
Post exposure:
Name / Title:
Email: