⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readme

📁 ICEExt for Driver Studio3.2的sourcecode
💻
字号:
 IceExt documentation is not available at a time because of recent project
 redesign. Below is ring-0 tracer documentation from Godness.

           Sten


 ------------------------ e X T r e m e - t R a C e r ------------------------

                       -=       version 0.04 beta     =-
                       -=           tutorial          =-

 eXTreme tRaCer engine is an additional set of commands for IceExt plugin under 
 SoftIce. These are "!trace", "!trcinit" and "!trccode" by which you can execute 
 step-by-step code tracing while tracking the conditions needed.

 So, how to use this stuff:



 !TRCINIT

 First, initialize the tracer by "!trcinit" command. As a parameter, the given 
 command takes the condition at which the tracer will stop. Currently, as a 
 condition you can use:
 - all registers names (eax, bx, dl, etc.);
 - comparison signs (<, >, >=, etc.); 
 - logic operators || and &&;
 - brackets which set the action execution order;
 - work with pointers *(dword *), *(word *), *(byte *);
 - strings in right part of condition 'some_string';
 - symbol names loading in Soft-Ice;

 For example,
 !trcinit (eax == 5 && (ebx >= 0x6 || ecx != edx)) || al < ah && ecx == 7

 The condition parcer is insensitive to the register of letters. Also you can 
 save on short SoftIce' command line, not using spaces.

 For example,
 !trcinit (EaX==5&&(eBx>=0x6||ECX!=edx))||al<AH&&ecx==7

 Though you can use brackets for setting action execution order, remember then 
 when not using the brackets the priority of operations executing goes the same 
 way as in C. I.e. "&&" operation has the higher priority rather than "||" 
 operation.
 
 For example,
 !trcinit eax != ebx && *ecx == 'MZ' || dl == 5 && esi >= MessageBoxA
 condition will be equivalent to 
 !trcinit (eax != ebx && *ecx == 'MZ') || (dl == 5 && esi >= MessageBoxA)

 All numbers in a condition parcer perceives as sexadecimal.

 With the pointers you can as to work as in C-lanquage
 I shall result possible examples:

 *eax == 'some_string'
 *esi == 0CD,2E
 *eax == 1,2,'some_string',0D,0A,'some_other_string',0,20,20
 *eax == *eax
 **(byte **)eax == al
 **(word **)eax != *(word *)ebx
 dl != ***ecx
 *00401000 == *edx
 *00402000 == MessageBoxA

 In the following condition - !trcinit *eax == dl - The right part of expression 
 will be expanded to type dword. If you want to compare directly with dl-register
 you need to result types, such as

 *(byte *)eax == dl

 !TRACE

 Well, now you should start the tracing by "!trace count [eip_when_P]" 
 command. The first parameter of this command is the number of instructions to 
 trace. The second parameter (unessential) is the address above which 
 (or at which) the tracer will execute the "P" SoftIce command.
 If not specify a second parameter, the tracer will keep tracing any address 
 met.
 
 For example,
 !trace 10000 0x77000000
 or
 !trace 10000 MessageBoxA

 When a stop happens, the tracer shows the number of traced commands in decimal 
 format.

 The sequence of checkings is the following:
 - the condition set by you is being checked (on "yes" the stop happens) 
 - similarly, the number of traced commands is being checked
 - the current value of eip is being checked for executing "P"



 !TRCCODE

 The given command created merely for debugging. The fact is that the "!trcinit" 
 command compiles the condition entered by you directly in executed code which 
 is called from int1 handler at its beginning. But with "!trccode" command you 
 can see the compiled code.

 If say you will write a condition, which (and you are sure about it) necessarily 
 will be met by the tracer, and the tracer don't want to stop at this at all, 
 it means the condition entered by you had been compiled incorrectly. In this 
 case please let me know about it at godness@omen.ru


 And now some abstract things should be noted:
 
 - Even if you will write wrong tracing condition, the minimal code to provide 
   the normal tracer functioning will be compiled. Therefore, you can start the 
   tracer AT ANY CONDITIONS.

 - At present, "P" commands are being executed by SoftIce, not the 
   tracer, so for tracing procedure the corresponding records are being added 
   to the SoftIce' log. As a simple experiment revealed, "P" command executing 
   slows down the general trace by 30 times.

 - Generally to use a command "P" it is not recommended (it is left only as the 
   special feature) since if function will not come back that SoftIce will lose 
   control above a code, well accordingly and tracer.

 - "P" command executing the tracer considers for one traced instruction.

 - If you do not want to expect while tracer will finish job you can stop it as 
   follows. Press Ctrl-D, Sotf-Ice will pop up on the screen and then to stop a mode 
   of trace simply type "!trace 1"
  
 -----------------------------------------------------------------------------

 Any ideas and wishes send me at godness@omen.ru or Sten at stenri@pisem.net


 Credits
 =======

 Thanks to Sten for things which he has explained to me... :)
 
 ------------------------ e X T r e m e - t R a C e r ------------------------

                                               Copyright (c) 2005-2006 Godness

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -