📄 log2.cpp
字号:
#include "BASEFUNC.H"
/*
log2 c:\trw.log #begin log
g if (eip>401000) #run a soft breakpoint, TRW2000 will log all instructions
log2 off #end log, and close file
*/
void Log_DoIt2();
void log2_write();
BOOL hook_log2();
BOOL cmd_LOG2 ( int argc, PSTR* argv );
BOOL fLog2 = FALSE;
class CLog2
{
public:
CLog2();
~CLog2();
};
CLog2 cinit; //must have a instance data
CLog2::~CLog2()
{
unhook( &hh_IntObj_01,hook_log2 ); //unhook twice is no problem
}
CLog2::CLog2()
{
Add_Command ( "LOG2", "filename | off",
"Log instruction to file",
0,
cmd_LOG2 );
msgl ( "LOG2 Plugs Initialized..." ) ;
}
// ---------------------------------------
void Log2_Begin()
{
if( fLog2 != 0 )
return;
fLog2 = TRUE;
hook( &hh_IntObj_01,hook_log2, 255 );
}
void Log2_End()
{
if( fLog2 == 0 )
return;
if( fLog2==2 )
log2_write();
unhook( &hh_IntObj_01,hook_log2 );
fLog2 = 0;
}
BOOL hook_log2()
{
if( fLog2 == FALSE )
return FALSE;
Log_DoIt2();
return FALSE; //must return FALSE
}
// ----------------------------------
char log2_fname[80];
DWORD log2_buf[0x400];
DWORD log2_top;
void Log_DoIt2()
{
log2_buf[log2_top++] = User_EIP;
if( log2_top==0x400 )
{
log2_write();
log2_top = 0;
}
}
void log2_write()
{
Begin_Nest_VMM_Exec();
HANDLE h = fopen_append( log2_fname );
fwrite(h,log2_buf,log2_top*4);
fclose(h);
End_Nest_VMM_Exec();
}
BOOL cmd_LOG2 ( int argc, PSTR* argv )
{
if( argc==0 )
{
if( fLog2== 0 )
msgl( "log2 is off" );
else
prtl( "log2 is logging to %s",log2_fname );
return TRUE;
}
if( arg1[0]=='O' && arg1[1]=='F' && arg1[2]=='F' )
{
Log2_End();
return TRUE;
}
strcpy( log2_fname, arg1 );
log2_top = 0;
Log2_Begin();
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -