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

📄 print.c

📁 win32program disassembler
💻 C
📖 第 1 页 / 共 5 页
字号:
                    else               {pr1ntf("inc esi");printCol+=7;}
                    break;   
        case 0x47:  if (operandOveride){pr1ntf("inc di"); printCol+=6;}
                    else               {pr1ntf("inc edi");printCol+=7;}
                    break;  
        case 0x48:  if (operandOveride){pr1ntf("dec ax"); printCol+=6;}
                    else               {pr1ntf("dec eax");printCol+=7;}
                    break;   
        case 0x49:  if (operandOveride){pr1ntf("dec cx"); printCol+=6;}
                    else               {pr1ntf("dec ecx");printCol+=7;}
                    break;   
        case 0x4A:  if (operandOveride){pr1ntf("dec dx"); printCol+=6;}
                    else               {pr1ntf("dec edx");printCol+=7;}
                    break;     
        case 0x4B:  if (operandOveride){pr1ntf("dec bx"); printCol+=6;}
                    else               {pr1ntf("dec ebx");printCol+=7;}
                    break;   
        case 0x4C:  if (operandOveride){pr1ntf("dec sp"); printCol+=6;}
                    else               {pr1ntf("dec esp");printCol+=7;}
                    break;   
        case 0x4D:  if (operandOveride){pr1ntf("dec bp"); printCol+=6;}
                    else               {pr1ntf("dec ebp");printCol+=7;}
                    break;   
        case 0x4E:  if (operandOveride){pr1ntf("dec si"); printCol+=6;}
                    else               {pr1ntf("dec esi");printCol+=7;}
                    break;   
        case 0x4F:  if (operandOveride){pr1ntf("dec di"); printCol+=6;}
                    else               {pr1ntf("dec edi");printCol+=7;}
                    break; 
        case 0x50:  if (operandOveride){pr1ntf("push ax"); printCol+=7;}
                    else               {pr1ntf("push eax");printCol+=8;}
                    break;   
        case 0x51:  if (operandOveride){pr1ntf("push cx"); printCol+=7;}
                    else               {pr1ntf("push ecx");printCol+=8;}
                    break;   
        case 0x52:  if (operandOveride){pr1ntf("push dx"); printCol+=7;}
                    else               {pr1ntf("push edx");printCol+=8;}
                    break;     
        case 0x53:  if (operandOveride){pr1ntf("push bx"); printCol+=7;}
                    else               {pr1ntf("push ebx");printCol+=8;} 
                    break;   
        case 0x54:  if (operandOveride){pr1ntf("push sp"); printCol+=7;}
                    else               {pr1ntf("push esp");printCol+=8;}
                    break;   
        case 0x55:  if (operandOveride){pr1ntf("push bp"); printCol+=7;}
                    else               {pr1ntf("push ebp");printCol+=8;}
                    break;   
        case 0x56:  if (operandOveride){pr1ntf("push si"); printCol+=7;}
                    else               {pr1ntf("push esi");printCol+=8;}
                    break;   
        case 0x57:  if (operandOveride){pr1ntf("push di"); printCol+=7;}
                    else               {pr1ntf("push edi");printCol+=8;}
                    break;  
        case 0x58:  if (operandOveride){pr1ntf("pop ax"); printCol+=6;}
                    else               {pr1ntf("pop eax");printCol+=7;}
                    break;   
        case 0x59:  if (operandOveride){pr1ntf("pop cx"); printCol+=6;}
                    else               {pr1ntf("pop ecx");printCol+=7;}
                    break;   
        case 0x5A:  if (operandOveride){pr1ntf("pop dx"); printCol+=6;}
                    else               {pr1ntf("pop edx");printCol+=7;}
                    break;     
        case 0x5B:  if (operandOveride){pr1ntf("pop bx"); printCol+=6;}
                    else               {pr1ntf("pop ebx");printCol+=7;}
                    break;   
        case 0x5C:  if (operandOveride){pr1ntf("pop sp"); printCol+=6;}
                    else               {pr1ntf("pop esp");printCol+=7;}
                    break;   
        case 0x5D:  if (operandOveride){pr1ntf("pop bp"); printCol+=6;}
                    else               {pr1ntf("pop ebp");printCol+=7;}
                    break;   
        case 0x5E:  if (operandOveride){pr1ntf("pop si"); printCol+=6;}
                    else               {pr1ntf("pop esi");printCol+=7;}
                    break;   
        case 0x5F:  if (operandOveride){pr1ntf("pop di"); printCol+=6;}
                    else               {pr1ntf("pop edi");printCol+=7;}
                    break; 
        case 0x60:  pr1ntf("pushad");               printCol+=6;  break;  
        case 0x61:  pr1ntf("popad");                printCol+=5;  break;   
        case 0x6C:  pr1ntf("ins byte, port[dx]");   printCol+=18; break;   
        case 0x6D:  pr1ntf("ins dword, port[dx]");  printCol+=19; break;   
        case 0x6E:  pr1ntf("outs port[dx], byte");  printCol+=19; break;     
        case 0x6F:  pr1ntf("outs port[dx], dword"); printCol+=20; break;    
        case 0x90:  pr1ntf("nop");                  printCol+=3;  break;     
        case 0x91:  if (operandOveride){pr1ntf("xchg ax, cx")  ;printCol+=11;}
                    else               {pr1ntf("xchg eax, ecx");printCol+=13;}
                    break;    
        case 0x92:  if (operandOveride){pr1ntf("xchg ax, dx")  ;printCol+=11;}
                    else               {pr1ntf("xchg eax, edx");printCol+=13;}
                    break; 
        case 0x93:  if (operandOveride){pr1ntf("xchg ax, bx")  ;printCol+=11;}
                    else               {pr1ntf("xchg eax, ebx");printCol+=13;}
                    break;     
        case 0x94:  if (operandOveride){pr1ntf("xchg ax, sp")  ;printCol+=11;}
                    else               {pr1ntf("xchg eax, esp");printCol+=13;}
                    break;     
        case 0x95:  if (operandOveride){pr1ntf("xchg ax, bp")  ;printCol+=11;}
                    else               {pr1ntf("xchg eax, ebp");printCol+=13;}
                    break;     
        case 0x96:  if (operandOveride){pr1ntf("xchg ax, si")  ;printCol+=11;}
                    else               {pr1ntf("xchg eax, esi");printCol+=13;}
                    break;   
        case 0x97:  if (operandOveride){pr1ntf("xchg ax, di")  ;printCol+=11;}
                    else               {pr1ntf("xchg eax, edi");printCol+=13;}
                    break;   
        case 0x98:  pr1ntf("cbw");                  printCol+=3;  break;   
        case 0x99:  if (operandOveride) {pr1ntf("cwd");}
                    else                {pr1ntf("cdq");} printCol+=3;    
                    break;   
        case 0x9C:  pr1ntf("pushfd");               printCol+=6;  break;   
        case 0x9D:  pr1ntf("popfd");                printCol+=5;  break;   
        case 0x9E:  pr1ntf("sahf");                 printCol+=4;  break;   
        case 0x9F:  pr1ntf("lahf");                 printCol+=4;  break;   
        case 0xA4:  pr1ntf("movsb");                printCol+=5;  break;   
        case 0xA5:  if (operandOveride) {pr1ntf ("movsw");}
                    else                {pr1ntf ("movsd");} printCol+=5; 
                    break;   
        case 0xA6:  pr1ntf("cmpsb");                printCol+=5;  break;   
        case 0xA7:  if (operandOveride) {pr1ntf ("cmpsw");}
                    else                {pr1ntf ("cmpsd");} printCol+=5;
                    break;   
        case 0xAA:  pr1ntf("stosb");                printCol+=5;  break;
        case 0xAB:  if (operandOveride) {pr1ntf ("stosw");}
                    else                {pr1ntf ("stosd");} printCol+=5;
                    break;    
        case 0xAC:  pr1ntf("lodsb");                printCol+=5;  break;   
        case 0xAD:  if (operandOveride) {pr1ntf ("lodsw");}
                    else                {pr1ntf ("lodsd");} printCol+=5;
                    break;   
        case 0xAE:  pr1ntf("scasb");                printCol+=5;  break;   
        case 0xAF:  if (operandOveride) {pr1ntf ("scasw");}
                    else                {pr1ntf ("scasd");} printCol+=5;
                    break;   
        case 0xC3:  pr1ntf("ret");  needspacing=1;           printCol+=3;
                    lastAnchor=cur_position+i_col-1;
                    needJump=1;     needJumpNext=cur_position+i_col;
                    pushTrace(145);
                    if(nextMode>0) orMap(lastAnchor, 0x80);
                    popTrace();
                    break;   
        case 0xC9:  pr1ntf("leave");                printCol+=5;  break;   
        case 0xCB:  pr1ntf("ret(far)");    needspacing=1;    printCol+=8; 
                    lastAnchor=cur_position+i_col-1;
                    needJump=1;     needJumpNext=cur_position+i_col;
                    pushTrace(146);
                    if(nextMode>0) orMap(lastAnchor, 0x80);
                    popTrace();
                    //leaveFlag=cur_position+i_col;
                    break;   
        case 0xCC:  pr1ntf("int 03");               printCol+=6;  break;   
        case 0xCE:  pr1ntf("into");                 printCol+=4;  break;   
        case 0xCF:  if (operandOveride){pr1ntf ("iret"); printCol+=4;}
                    else               {pr1ntf ("iretd");printCol+=5;}
                    break;   
        case 0xD7:  pr1ntf("xlatb");                printCol+=5;  break;   
        case 0xEC:  pr1ntf("in al, port[dx]");      printCol+=15; break;   
        case 0xED:  if (operandOveride){pr1ntf ("in ax, port[dx]"); printCol+=15;}
                    else               {pr1ntf ("in eax, port[dx]");printCol+=16;}
                    break;   
        case 0xEE:  pr1ntf("out port[dx], al");     printCol+=16; break;   
        case 0xEF:  if (operandOveride){pr1ntf ("out port[dx], ax"); printCol+=16;}
                    else               {pr1ntf ("out port[dx], eax");printCol+=17;}
                    break;   
        case 0xF0:  pr1ntf("lock");                 printCol+=4;  break;   
        case 0xF4:  pr1ntf("hlt");                  printCol+=3;  break;   
        case 0xF5:  pr1ntf("cmc");                  printCol+=3;  break;   
        case 0xF8:  pr1ntf("clc");                  printCol+=3;  break;  
        case 0xF9:  pr1ntf("stc");                  printCol+=3;  break;   
        case 0xFA:  pr1ntf("cli");                  printCol+=3;  break;   
        case 0xFB:  pr1ntf("sti");                  printCol+=3;  break;   
        case 0xFC:  pr1ntf("cld");                  printCol+=3;  break;     
        case 0xFD:  pr1ntf("std");                  printCol+=3;  break;
        default:    fatalError=107;return -1;
    }
    return 0;
}

int print1case()
{
    switch(i_opcode)
    {
        case 0x04:  pr1ntf("add al, ");    print_i_byte(); printCol+=8; break;   
        case 0x0C:  pr1ntf("or al, ");     print_i_byte(); printCol+=7; break;   
        case 0x14:  pr1ntf("adc al, ");    print_i_byte(); printCol+=8; break;   
        case 0x1C:  pr1ntf("sbb al, ");    print_i_byte(); printCol+=8; break;     
        case 0x24:  pr1ntf("and al, ");    print_i_byte(); printCol+=8; break;    
        case 0x2C:  pr1ntf("sub al, ");    print_i_byte(); printCol+=8; break;     
        case 0x34:  pr1ntf("xor al, ");    print_i_byte(); printCol+=8; break;    
        case 0x3C:  pr1ntf("cmp al, ");    print_i_byte(); printCol+=8; break; 
        case 0x6A:  pr1ntf("push ");       print_i_byte32(); printCol+=5; break;     
        case 0x70:  pr1ntf("jo ");         print_rel8();   printCol+=3; break;     
        case 0x71:  pr1ntf("jno ");        print_rel8();   printCol+=4; break;     
        case 0x72:  pr1ntf("jc ");         print_rel8();   printCol+=3; break;   
        case 0x73:  pr1ntf("jae ");        print_rel8();   printCol+=4; break;   
        case 0x74:  pr1ntf("je ");         print_rel8();   printCol+=3; break;   
        case 0x75:  pr1ntf("jne ");        print_rel8();   printCol+=4; break;   
        case 0x76:  pr1ntf("jbe ");        print_rel8();   printCol+=4; break;   
        case 0x77:  pr1ntf("ja ");         print_rel8();   printCol+=3; break;   
        case 0x78:  pr1ntf("js ");         print_rel8();   printCol+=3; break;   
        case 0x79:  pr1ntf("jns ");        print_rel8();   printCol+=4; break;   
        case 0x7A:  pr1ntf("jpe ");        print_rel8();   printCol+=4; break;   
        case 0x7B:  pr1ntf("jpo ");        print_rel8();   printCol+=4; break;   
        case 0x7C:  pr1ntf("jl ");         print_rel8();   printCol+=3; break;   
        case 0x7D:  pr1ntf("jge ");        print_rel8();   printCol+=4; break;   
        case 0x7E:  pr1ntf("jle ");        print_rel8();   printCol+=4; break;   
        case 0x7F:  pr1ntf("jg ");         print_rel8();   printCol+=3; break;   
        case 0xA8:  pr1ntf("test al, ");   print_i_byte(); printCol+=9; break;   
        case 0xB0:  pr1ntf("mov al, ");    print_i_byte(); printCol+=8; break;   
        case 0xB1:  pr1ntf("mov cl, ");    print_i_byte(); printCol+=8; break;   
        case 0xB2:  pr1ntf("mov dl, ");    print_i_byte(); printCol+=8; break;   
        case 0xB3:  pr1ntf("mov bl, ");    print_i_byte(); printCol+=8; break;   
        case 0xB4:  pr1ntf("mov ah, ");    print_i_byte(); printCol+=8; break;   
        case 0xB5:  pr1ntf("mov ch, ");    print_i_byte(); printCol+=8; break;   
        case 0xB6:  pr1ntf("mov dh, ");    print_i_byte(); printCol+=8; break;   
        case 0xB7:  pr1ntf("mov bh, ");    print_i_byte(); printCol+=8; break;   
        case 0xCD:  pr1ntf("int ");        print_i_byte(); printCol+=4; break;   
        case 0xD4:  pr1ntf("aam ");                        printCol+=4; break;   
        case 0xD5:  pr1ntf("aad ");                        printCol+=4; break;   
        case 0xE0:  pr1ntf("loopne ");     print_rel8();   printCol+=7; break;   
        case 0xE1:  pr1ntf("loope ");      print_rel8();   printCol+=6; break;   
        case 0xE2:  pr1ntf("loop ");       print_rel8();   printCol+=5; break;   
        case 0xE3:  pr1ntf("jecxz ");      print_rel8();   printCol+=6; break;   
        case 0xE4:  pr1ntf("in al, port["); print_i_byte(); pr1ntf("]");  printCol+=13; break;   
        case 0xE5:  pr1ntf("in eax, port[");print_i_byte(); pr1ntf("]");  printCol+=14; break;   
        case 0xE6:  pr1ntf("out port["); print_i_byte(); pr1ntf("], al"); printCol+=14; break;   
        case 0xE7:  pr1ntf("out port["); print_i_byte(); pr1ntf("], eax");printCol+=15; break;
        case 0xEB:  pr1ntf("jmp ");        ref=print_rel8();                printCol+=4;
                    if (nextMode>0)
                    {
                        if (isThisSecure(ref) || referCount(ref)>2 || 
                            (opclassSave==2 && (opsave&0x80)) )  
                        {
                            lastAnchor=cur_position+i_col-1;
                            pushTrace(147);
                            orMap(lastAnchor, 0x80);
                            popTrace();
                        }
                    }
                    break;
        default:    fatalError=109;return -1;
    }
    return 0;

}

int print2case()
{
    if (i_opcode==0xC2)
    {
        pr2ntf("ret %04X", i_word);    needspacing=1; 
        needJump=1;     needJumpNext=cur_position+i_col;
    }
    else
    {
        pr2ntf("ret %04X", i_word);    needspacing=1; 
        needJump=1;     needJumpNext=cur_position+i_col;
    }
    printCol+=8;
    lastAnchor = cur_position+i_col-1;
    pushTrace(148);
    if(nextMode>0) orMap(lastAnchor, 0x80);
    popTrace();
    //leaveFlag=cur_position+i_col;
    return 0;
}

int print3case()
{
    pr2ntf("enter %04X, ", i_word); print_i_byte();
    printCol+=10;
    return 0;
}

int print4case()
{
    switch(i_opcode)
    {
        case 0x05:  if (operandOveride){pr1ntf ("add ex, "); printCol+=8;}
                    else               {pr1ntf ("add eax, ");printCol+=9;}  
                    print_i_dword();     
                    break;   
        case 0x0D:  if (operandOveride){pr1ntf ("or ax, ");  printCol+=7;}
                    else               {pr1ntf ("or eax, "); printCol+=8;}   
                    print_i_dword();     
                    break;   
        case 0x15:  if (operandOveride){pr1ntf ("adc ax, "); printCol+=8;}
                    else               {pr1ntf ("adc eax, ");printCol+=9;}  
                    print_i_dword();     
                    break;   
        case 0x1D:  if (operandOveride){pr1ntf ("sbb ax, "); printCol+=8;}
                    else               {pr1ntf ("sbb eax, ");printCol+=9;}  
                    print_i_dword();     
                    break;     
        case 0x25:  if (operandOveride){pr1ntf ("and ax, "); printCol+=8;}
                    else               {pr1ntf ("and eax, ");printCol+=9;}  
                    print_i_dword();     
                    break; 
        case 0x2D:  if (operandOveride){pr1ntf ("sub ax, "); printCol+=8;}
                    else               {pr1ntf ("sub eax, ");printCol+=9;}  
                    print_i_dword();     
                    break;      
        case 0x35:  if (operandOveride){pr1ntf ("xor ax, "); printCol+=8;}
                    else               {pr1ntf ("xor eax, ");printCol+=9;}  
                    print_i_dword();     
                    break;     
        case 0x3D:  if (operandOveride){pr1ntf ("cmp ax, "); printCol+=8;}
                    else               {pr1ntf ("cmp eax, ");printCol+=9;}  
                    print_i_dword();     
                    break;  
        case 0x68:  pr1ntf("push ");    ref=print_i_dword();     // this is OK 
        // well I really don't know it is reasonably safe to do this.
        // I think when we push some (possible) address references into stack
        // there is strong reason to do so. that's why i am doing this. i guess...
                    lclass=512;         printCol+=5; 
                    break;     
        case 0xA0:  pr1ntf("mov al, byte");    print_moff(); printCol+=12;        
                    break;     
        case 0xA1:  if (operandOveride){pr1ntf ("mov ax, word");  printCol+=12;}
                    else               {pr1ntf ("mov eax, dword");printCol+=14;}  
                    ref=print_moff();
                    if (isGoodAddress(ref)) 
                    {if (operandOveride) lclass=516; else lclass=1024;}
                    break;     
        case 0xA2:  pr1ntf("mov byte");print_moff();pr1ntf(", al");printCol+=12; 
                    break;
        case 0xA3:  if (operandOveride){pr1ntf ("mov word"); printCol+=12;}
                    else               {pr1ntf ("mov dword");printCol+=14;}
                    print_moff();
                    if (operandOveride){pr1ntf (", ax");}
                    else               {pr1ntf (", eax");}
                    break;
        case 0xA9:  if (operandOveride){pr1ntf ("test ax, "); printCol+= 9;}
                    else               {pr1ntf ("test eax, ");printCol+=10;} 
                    print_i_dword();     
                    break;   
        case 0xB8:  if (operandOveride){pr1ntf ("mov ax, "); printCol+=8;}
                    else               {pr1ntf ("mov eax, ");printCol+=9;}  
                    ref=print_i_dword();lclass=1024;     
                    break;   
        case 0xB9:  if (operandOveride){pr1ntf ("mov cx, "); printCol+=8;}
                    else               {pr1ntf ("mov ecx, ");printCol+=9;}  
                    ref=print_i_dword();lclass=1024;     
                    break;   
        case 0xBA:  if (operandOveride){pr1ntf ("mov dx, "); printCol+=8;}
                    else               {pr1ntf ("mov edx, ");printCol+=9;}  
                    ref=print_i_dword();lclass=1024;     
                    break;   
        case 0xBB:  if (operandOveride){pr1ntf ("mov bx, "); printCol+=8;}
                    else               {pr1ntf ("mov ebx, ");printCol+=9;}  
                    ref=print_i_dword();lclass=1024;     
                    break;   
        case 0xBC:  if (operandOveride){pr1ntf ("mov sp, "); printCol+=8;}
                    else               {pr1ntf( "mov esp, ");printCol+=9;}  
                    ref=print_i_dword();lclass=1024;     
                    break;   
        case 0xBD:  if (operandOveride){pr1ntf ("mov bp, "); printCol+=8;}

⌨️ 快捷键说明

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