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

📄 print.c

📁 win32program disassembler
💻 C
📖 第 1 页 / 共 5 页
字号:
                    else               {pr1ntf ("mov ebp, ");printCol+=9;}  
                    ref=print_i_dword();lclass=1024;     
                    break;   
        case 0xBE:  if (operandOveride){pr1ntf ("mov si, "); printCol+=8;}
                    else               {pr1ntf ("mov esi, ");printCol+=9;}  
                    ref=print_i_dword();lclass=1024;     
                    break;   
        case 0xBF:  if (operandOveride){pr1ntf ("mov di, "); printCol+=8;}
                    else               {pr1ntf ("mov edi, ");printCol+=9;}  
                    ref=print_i_dword();lclass=1024;     
                    break;   
        case 0xE8:  pr1ntf("call "); 
                    lclass = 11;        printCol+=5;
                    ref = print_rel32();
                    needCall=1;
                    if (nextMode) {
                        if (isGoodAddress(ref))
                        {
                            needCallRef=ref;
                            needCallNext=cur_position+i_col;
                            lastAnchor=cur_position+i_col-1;
                            pushTrace(158);
                            if(nextMode>0) orMap(lastAnchor, 0x80);
                            popTrace();
                        }
                        else fatalError=-18;
                    }
                    else printName(cur_position); 
                    break;
                                        
        case 0xE9:  pr1ntf("jmp ");  ref = print_rel32();       
                    lclass =  3;      printCol+=4;
                    lastAnchor=cur_position+i_col-1;
                    needJump=1;     needJumpNext=cur_position+i_col;
                    if (nextMode>0) 
                    {
                        if (! isGoodAddress(ref)) {lclass=0; fatalError=990;}
                        else
                        {       
                            pushTrace(149);
                            orMap(lastAnchor, 0x80);
                            popTrace();
                        }
                    }
                    else printName(cur_position);
                    //leaveFlag=cur_position+i_col;
                    break;            
        default:    fatalError=111;return -1;
    }
    return 0;

}

int print5case()
{
    if (i_opcode==0x9A)
    {
        pr3ntf("call far %04X:%08X", i_word,i_dword);
        {lclass=15; ref=i_dword;}
        printCol+=22;
    }
    else
    {
        pr3ntf("jmp far %04X:%08X", i_word,i_dword);
        needJump=1;     needJumpNext=cur_position+i_col;
        {lclass=7; ref=i_dword;}
        printCol+=21;
    }
    return 0;
}

int print6case()  
{
int    rr;

    if (operandOveride) rr=16; else rr=32;

    switch(i_opcode)
    {
          case 0x00: pr1ntf("add ");    ref=r_m_( 8);  pr1ntf(", ");  r___( 8);  printCol+=6; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x01: pr1ntf("add ");    ref=r_m_(rr);  pr1ntf(", ");  r___(rr);  printCol+=6; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break; 
          case 0x02: pr1ntf("add ");    r___( 8);  pr1ntf(", ");  ref=r_m_( 8);  printCol+=6; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x03: pr1ntf("add ");    r___(rr);  pr1ntf(", ");  ref=r_m_(rr);  printCol+=6; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break; 
          case 0x08: pr1ntf("or ");     ref=r_m_( 8);  pr1ntf(", ");  r___( 8);  printCol+=5; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x09: pr1ntf("or ");     ref=r_m_(rr);  pr1ntf(", ");  r___(rr);  printCol+=5; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break; 
          case 0x0A: pr1ntf("or ");     r___( 8);  pr1ntf(", ");  ref=r_m_( 8);  printCol+=5; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x0B: pr1ntf("or ");     r___(rr);  pr1ntf(", ");  ref=r_m_(rr);  printCol+=5; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break; 
          case 0x10: pr1ntf("adc ");    ref=r_m_( 8);  pr1ntf(", ");  r___( 8);  printCol+=6; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x11: pr1ntf("adc ");    ref=r_m_(rr);  pr1ntf(", ");  r___(rr);  printCol+=6; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break; 
          case 0x12: pr1ntf("adc ");    r___( 8);  pr1ntf(", ");  ref=r_m_( 8);  printCol+=6; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x13: pr1ntf("adc ");    r___(rr);  pr1ntf(", ");  ref=r_m_(rr);  printCol+=6; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break; 
          case 0x18: pr1ntf("sbb ");    ref=r_m_( 8);  pr1ntf(", ");  r___( 8);  printCol+=6; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x19: pr1ntf("sbb ");    ref=r_m_(rr);  pr1ntf(", ");  r___(rr);  printCol+=6; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break; 
          case 0x1A: pr1ntf("sbb ");    r___( 8);  pr1ntf(", ");  ref=r_m_( 8);  printCol+=6; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x1B: pr1ntf("sbb ");    r___(rr);  pr1ntf(", ");  ref=r_m_(rr);  printCol+=6; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break; 
          case 0x20: pr1ntf("and ");    ref=r_m_( 8);  pr1ntf(", ");  r___( 8);  printCol+=6; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x21: pr1ntf("and ");    ref=r_m_(rr);  pr1ntf(", ");  r___(rr);  printCol+=6; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break; 
          case 0x22: pr1ntf("and ");    r___( 8);  pr1ntf(", ");  ref=r_m_( 8);  printCol+=6; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x23: pr1ntf("and ");    r___(rr);  pr1ntf(", ");  ref=r_m_(rr);  printCol+=6; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break; 
          case 0x28: pr1ntf("sub ");    ref=r_m_( 8);  pr1ntf(", ");  r___( 8);  printCol+=6; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x29: pr1ntf("sub ");    ref=r_m_(rr);  pr1ntf(", ");  r___(rr);  printCol+=6; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break; 
          case 0x2A: pr1ntf("sub ");    r___( 8);  pr1ntf(", ");  ref=r_m_( 8);  printCol+=6; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x2B: pr1ntf("sub ");    r___(rr);  pr1ntf(", ");  ref=r_m_(rr);  printCol+=6; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break; 
          case 0x30: pr1ntf("xor ");    ref=r_m_( 8);  pr1ntf(", ");  r___( 8);  printCol+=6; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x31: pr1ntf("xor ");    ref=r_m_(rr);  pr1ntf(", ");  r___(rr);  printCol+=6; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break; 
          case 0x32: pr1ntf("xor ");    r___( 8);  pr1ntf(", ");  ref=r_m_( 8);  printCol+=6; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x33: pr1ntf("xor ");    r___(rr);  pr1ntf(", ");  ref=r_m_(rr);  printCol+=6; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break; 
          case 0x38: pr1ntf("cmp ");    ref=r_m_( 8);  pr1ntf(", ");  r___( 8);  printCol+=6; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x39: pr1ntf("cmp ");    ref=r_m_(rr);  pr1ntf(", ");  r___(rr);  printCol+=6; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break; 
          case 0x3A: pr1ntf("cmp ");    r___( 8);  pr1ntf(", ");  ref=r_m_( 8);  printCol+=6; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x3B: pr1ntf("cmp ");    r___(rr);  pr1ntf(", ");  ref=r_m_(rr);  printCol+=6; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break; 
          case 0x62: pr1ntf("bound ");  r___(rr);  pr1ntf(", ");  ref=m32_32();  printCol+=8; 
                   if (isGoodAddress(ref)) lclass=518;
                   break; 
          case 0x63: pr1ntf("arpl ");   ref=r_m_(16);  pr1ntf(", ");  r___(16);  printCol+=7; 
                   if (isGoodAddress(ref)) lclass=516;
                   break; 
          case 0x84: pr1ntf("test ");   ref=r_m_( 8);  pr1ntf(", ");  r___( 8);  printCol+=7; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x85: pr1ntf("test ");   ref=r_m_(rr);  pr1ntf(", ");  r___(rr);  printCol+=7; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break; 
          case 0x86: pr1ntf("xchg ");   ref=r_m_( 8);  pr1ntf(", ");  r___( 8);  printCol+=7; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x87: pr1ntf("xchg ");   ref=r_m_(rr);  pr1ntf(", ");  r___(rr);  printCol+=7; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break; 
          case 0x88: pr1ntf("mov ");    ref=r_m_( 8);  pr1ntf(", ");  r___( 8);  printCol+=6; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x89: pr1ntf("mov ");    ref=r_m_(rr);  pr1ntf(", ");  r___(rr);  printCol+=6; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=1024;}
                   break; 
          case 0x8A: pr1ntf("mov ");    r___( 8);  pr1ntf(", ");  ref=r_m_( 8);  printCol+=6; 
                   if (isGoodAddress(ref)) lclass=520;
                   break; 
          case 0x8B: pr1ntf("mov ");    r___(rr);  pr1ntf(", ");  ref=r_m_(rr);     printCol+=6; 
                   reg=regTable[i_mod]; tempref[reg]=ref; temppos[reg]=cur_position;
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=1024;}
                   break; 
          case 0x8C: pr1ntf("mov ");    ref=r_m_(16);  pr1ntf(", ");  Sreg__();  printCol+=6; 
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=1024;}
                   break; 
          case 0x8D: pr1ntf("lea ");    r___(rr);  pr1ntf(", ");  ref=m_____();  printCol+=6; 
                   reg=regTable[i_mod]; tempref[reg]=ref; temppos[reg]=cur_position;
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break; 
          case 0x8E: pr1ntf("mov ");    Sreg__();  pr1ntf(", ");  ref=r_m_(16);  printCol+=6; 
                   if (isGoodAddress(ref)) lclass=516;
                   break; 
          case 0xC4: pr1ntf("les es:"); r___(rr);  pr1ntf(", ");  ref=m16_32();  printCol+=9; 
                   if (isGoodAddress(ref)) lclass=516;
                   break; 
          case 0xC5: pr1ntf("lds ds:"); r___(rr);  pr1ntf(", ");  ref=m16_32();  printCol+=9; 
                   if (isGoodAddress(ref)) lclass=516;
                   break;
        default:   fatalError=113;return -1;
    }
    return 0;
}

int print7case()
{
int    rr;

    if (operandOveride) rr=16; else rr=32;

    pr1ntf("imul "); r___(rr); 
    if (modTable[i_mod]<8 || regTable[i_mod]!=rmTable[i_mod])
    {   pr1ntf(", "); ref=r_m_(rr); printCol+=2;}
    pr1ntf(", "); 
    print_i_byte();
    printCol+=7;
    if (isGoodAddress(ref)) 
    {if (operandOveride) lclass=516; else lclass=514;}
    return 0;
}

int print8case()
{
int    rr;

    if (operandOveride) rr=16; else rr=32;

    pr1ntf("imul "); r___(rr); 
    if (modTable[i_mod]<8 || regTable[i_mod]!=rmTable[i_mod])
    {   pr1ntf(", "); ref=r_m_(rr); printCol+=2;}
    pr1ntf(", "); 
    print_i_dword();
    printCol+=7;
    if (isGoodAddress(ref)) 
    {if (operandOveride) lclass=516; else lclass=514;}
    return 0;
}

int print9case()
{
int    rr;

    if (operandOveride) rr=16; else rr=32;

    specifierFlag = my_ON;
    switch(i_opcode)
    {
        case 0x8F: 
                   if (regTable[i_mod]>0)
                   {  
                       fatalError=115;
                       specifierFlag = my_OFF;
                       return -1;
                   }
                   pr1ntf("pop "); ref=r_m_(rr); printCol+=4;
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break;
        case 0xD0:
                   switch(regTable[i_mod])
                   {
                       case 0: pr1ntf("rol "); break;
                       case 1: pr1ntf("ror "); break;
                       case 2: pr1ntf("rcl "); break;
                       case 3: pr1ntf("rcr "); break;
                       case 4: pr1ntf("shl "); break;
                       case 5: pr1ntf("shr "); break;
                       case 7: pr1ntf("sar "); break;
                       default:    fatalError=117;
                   }
                   ref=r_m_( 8); pr1ntf(", 1"); printCol+=7;
                   if (isGoodAddress(ref)) lclass=520;
                   break;
        case 0xD1:
                   switch(regTable[i_mod])
                   {
                       case 0: pr1ntf("rol "); break;
                       case 1: pr1ntf("ror "); break;
                       case 2: pr1ntf("rcl "); break;
                       case 3: pr1ntf("rcr "); break;
                       case 4: pr1ntf("shl "); break;
                       case 5: pr1ntf("shr "); break;
                       case 7: pr1ntf("sar "); break;
                       default:    fatalError=118;
                   }
                   ref=r_m_(rr); pr1ntf(", 1"); printCol+=7;
                   if (isGoodAddress(ref)) 
                   {if (operandOveride) lclass=516; else lclass=514;}
                   break;
        case 0xD2:
                   switch(regTable[i_mod])
                   {
                       case 0: pr1ntf("rol "); break;
                       case 1: pr1ntf("ror "); break;
                       case 2: pr1ntf("rcl "); break;
                       case 3: pr1ntf("rcr "); break;
                       case 4: pr1ntf("shl "); break;
                       case 5: pr1ntf("shr "); break;
                       case 7: pr1ntf("sar "); break;
                       default:    fatalError=119;
                   }
                   ref=r_m_( 8); pr1ntf(", cl"); printCol+=8;
                   if (isGoodAddress(ref)) lclass=520;
                   break;
        case 0xD3:
                   switch(regTable[i_mod])
                   {
                       case 0: pr1ntf("rol "); break;
                       case 1: pr1ntf("ror "); break;
           

⌨️ 快捷键说明

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