if ( 0xE8 == code_instr.opcode )
// 0xE8 call类型
{
dwJumpTo = ( DWORD)p + *( DWORD*)(p+1) + 5 ;
}
else if ( 0xFF == *p && 0x15 == *(p+1) ) // 0xFF15 call类型
{
dwJumpTo = *( DWORD* )(*( DWORD* )( p + 2 ));
}
else if ( 0xFF == *p && 0x14 == *(p+1) ) // 0xFF14 call 数组[Index]
{
dwJumpTo = *( DWORD*)(p + 3) ;
ProbeForRead( ( PVOID)dwJumpTo, 4, 4 );
dwJumpTo = *( DWORD* ) dwJumpTo ;
}
else if ( 0xFF == *p && 0xD2 == *(p+1) ) // 0xFFD2 类型, 不清楚是什么指令
{
dwJumpTo = ( DWORD)(p + 2) ;
}
else if ( 0xFF == *p && 0x12 == *(p+1) && 0xba == *(p-5) ) // 0xFF12类型call [寄存器]
dwJumpTo = *( DWORD* )( p - 4 );
ProbeForRead( (PVOID)dwJumpTo, 4, 4 );
dwJumpTo = *( DWORD* ) dwJumpTo ;
}
{
dwJumpTo = ( DWORD)p + *( DWORD*)(p+1) + 5 ;
}
else if ( 0xFF == *p && 0x15 == *(p+1) ) // 0xFF15 call类型
{
dwJumpTo = *( DWORD* )(*( DWORD* )( p + 2 ));
}
else if ( 0xFF == *p && 0x14 == *(p+1) ) // 0xFF14 call 数组[Index]
{
dwJumpTo = *( DWORD*)(p + 3) ;
ProbeForRead( ( PVOID)dwJumpTo, 4, 4 );
dwJumpTo = *( DWORD* ) dwJumpTo ;
}
else if ( 0xFF == *p && 0xD2 == *(p+1) ) // 0xFFD2 类型, 不清楚是什么指令
{
dwJumpTo = ( DWORD)(p + 2) ;
}
else if ( 0xFF == *p && 0x12 == *(p+1) && 0xba == *(p-5) ) // 0xFF12类型call [寄存器]
dwJumpTo = *( DWORD* )( p - 4 );
ProbeForRead( (PVOID)dwJumpTo, 4, 4 );
dwJumpTo = *( DWORD* ) dwJumpTo ;
}