//---------------------------------------------------------------------- // емулятер int idaapi T900_emu(void) { #if IDP_INTERFACE_VERSION > 37 uint32 Feature = cmd.get_canon_feature(); #else uint32 Feature = Instructions[cmd.itype].feature; uFlag = getFlags(cmd.ea); #endif // получим типы операндов int flag1 = is_forced_operand(cmd.ea, 0); int flag2 = is_forced_operand(cmd.ea, 1); flow = ((Feature & CF_STOP) == 0); // пометим ссылки двух операндов if ( Feature & CF_USE1) TouchArg(cmd.Op1, flag1, 1 ); if ( Feature & CF_USE2) TouchArg(cmd.Op2, flag2, 1 ); // поставим переход в очередь if ( Feature & CF_JUMP) QueueSet(Q_jumps,cmd.ea ); // поставим изменения if ( Feature & CF_CHG1) TouchArg(cmd.Op1, flag1, 0 ); if ( Feature & CF_CHG2) TouchArg(cmd.Op2, flag2, 0 ); // если не стоп - продолжим на след. инструкции if ( flow) ua_add_cref(0,cmd.ea+cmd.size,fl_F ); return(1); }
//---------------------------------------------------------------------- int emu(void) { uint32 Feature = cmd.get_canon_feature(); flow = ((Feature & CF_STOP) == 0); if ( Feature & CF_USE1 ) TouchArg(cmd.Op1,1); if ( Feature & CF_USE2 ) TouchArg(cmd.Op2,1); if ( Feature & CF_JUMP ) QueueMark(Q_jumps,cmd.ea); if ( Feature & CF_CHG1 ) TouchArg(cmd.Op1,0); if ( Feature & CF_CHG2 ) TouchArg(cmd.Op2,0); if ( flow && canFlow() ) ua_add_cref(0,cmd.ea+cmd.size,fl_F); switch ( cmd.itype ) { case TMS_ldp: // change DP register case TMS2_ldp: // change DP register case TMS2_ldpk: // change DP register { uint v = (cmd.Op1.type == o_imm) ? uint(cmd.Op1.value) : -1u; splitSRarea1(get_item_end(cmd.ea),rDP,v,SR_auto); } break; } return 1; }
int emu( void ) { ulong Feature = cmd.get_canon_feature(); flow = ((Feature & CF_STOP) == 0); if( Feature & CF_USE1 ) TouchArg( cmd.Op1, 1 ); if( Feature & CF_USE2 ) TouchArg( cmd.Op2, 1 ); if( Feature & CF_JUMP ) QueueMark( Q_jumps, cmd.ea ); if( Feature & CF_CHG1 ) TouchArg( cmd.Op1, 0 ); if( Feature & CF_CHG2 ) TouchArg( cmd.Op2, 0 ); if( flow ) ua_add_cref( 0, cmd.ea+cmd.size, fl_F ); return 1; }
int idaapi emu( void ) { uint32 Feature = cmd.get_canon_feature(); flow = ((Feature & CF_STOP) == 0); if( Feature & CF_USE1 ) TouchArg( cmd.Op1, 1 ); if( Feature & CF_USE2 ) TouchArg( cmd.Op2, 1 ); if( Feature & CF_USE3 ) TouchArg( cmd.Op3, 1 ); if( Feature & CF_JUMP ) QueueMark( Q_jumps, cmd.ea ); if( Feature & CF_CHG1 ) TouchArg( cmd.Op1, 0 ); if( Feature & CF_CHG2 ) TouchArg( cmd.Op2, 0 ); if( Feature & CF_CHG3 ) TouchArg( cmd.Op3, 0 ); switch ( cmd.itype ) { case I196_popa: splitSRarea1(cmd.ea, WSR, BADSEL, SR_auto); splitSRarea1(cmd.ea, WSR1, BADSEL, SR_auto); break; } if( flow ) ua_add_cref( 0, cmd.ea+cmd.size, fl_F ); return 1; }
//---------------------------------------------------------------------- int emu(void) { uint32 Feature = cmd.get_canon_feature(); int flag1 = is_forced_operand(cmd.ea, 0); int flag2 = is_forced_operand(cmd.ea, 1); int flag3 = is_forced_operand(cmd.ea, 2); flow = ((Feature & CF_STOP) == 0); if ( Feature & CF_USE1 ) TouchArg(cmd.Op1, flag1, 1); if ( Feature & CF_USE2 ) TouchArg(cmd.Op2, flag2, 1); if ( Feature & CF_USE3 ) TouchArg(cmd.Op3, flag3, 1); if ( Feature & CF_CHG1 ) TouchArg(cmd.Op1, flag1, 0); if ( Feature & CF_CHG2 ) TouchArg(cmd.Op2, flag2, 0); if ( Feature & CF_CHG3 ) TouchArg(cmd.Op3, flag3, 0); // // Determine if the next instruction should be executed // if ( !flow ) flow = may_be_skipped(); if ( segtype(cmd.ea) == SEG_XTRN ) flow = 0; if ( flow ) ua_add_cref(0,cmd.ea+cmd.size,fl_F); return 1; }
//---------------------------------------------------------------------- int i860_emu(void) { bool funcret = true; uint32 Feature = cmd.get_canon_feature(); if ( Feature & CF_USE1 ) if ( !TouchArg(cmd.Op1,1) ) funcret = false; if ( Feature & CF_USE2 ) if ( !TouchArg(cmd.Op2,1) ) funcret = false; if ( Feature & CF_USE3 ) if ( !TouchArg(cmd.Op3,1) ) funcret = false; if ( Feature & CF_JUMP ) QueueMark(Q_jumps,cmd.ea); if ( Feature & CF_CHG1 ) if ( !TouchArg(cmd.Op1,0) ) funcret = false; if ( Feature & CF_CHG2 ) if ( !TouchArg(cmd.Op2,0) ) funcret = false; if ( Feature & CF_CHG3 ) if ( !TouchArg(cmd.Op3,0) ) funcret = false; if ( funcret && canFlow() ) ua_add_cref(0,cmd.ea+cmd.size,fl_F); return 1; }
//---------------------------------------------------------------------- int emu(void) { uint32 Feature = cmd.get_canon_feature(); flow = (Feature & CF_STOP) == 0; int flag1 = is_forced_operand(cmd.ea, 0); int flag2 = is_forced_operand(cmd.ea, 1); int flag3 = is_forced_operand(cmd.ea, 2); if(Feature & CF_USE1) TouchArg(cmd.Op1, flag1, 1); if(Feature & CF_USE2) TouchArg(cmd.Op2, flag2, 1); if(Feature & CF_USE3) TouchArg(cmd.Op3, flag3, 1); if(Feature & CF_JUMP) QueueMark(Q_jumps, cmd.ea); if(Feature & CF_CHG1) TouchArg(cmd.Op1, flag1, 0); if(Feature & CF_CHG2) TouchArg(cmd.Op2, flag2, 0); if(Feature & CF_CHG3) TouchArg(cmd.Op3, flag3, 0); if(flow) ua_add_cref(0, cmd.ea + cmd.size, fl_F); return(1); }