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

📄 print.c

📁 win32program disassembler
💻 C
📖 第 1 页 / 共 5 页
字号:
        case  5: 
                 rm_m32(n);
                 return -1;
        default: fatalError=105;
    }
	return 1;
}


int  Sreg__()
{
    pr2ntf("%s", SregString[regTable[i_mod]]);
    printCol+=strlen(SregString[regTable[i_mod]]);
    return i_mod;
}
int  m16_32()
{
    pr1ntf("m16:m32"); ref = r_m_ ( 0);
    printCol+=7;
    return ref;
}
int  m32_32()
{
    pr1ntf("m32:m32"); ref = r_m_ ( 0);
    printCol+=7;
    return ref;
}
int  m_____()
{
int    rr;

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

    return r_m_ (rr);
}

void nmonicprint()
{
    if (opclass==1) 
    {
        switch(i_opclass)
        {
            case  0: print0case();
                     break;
            case  1: print1case();
                     break;
            case  2: print2case();
                     break;
            case  3: print3case();
                     break;
            case  4: print4case();
                     break; 
            case  5: print5case();
                     break;
            case  6: print6case();
                     break;
            case  7: print7case();
                     break;
            case  8: print8case();
                     break;
            case  9: print9case();
                     break;
            case 10: print10case();
                     break;
            case 11: print11case();
                     break;
            case 12: print12case();
                     break;
            case 13: print13case();   
                     break;
            case 14: print14case();
                     break;
            case 15: print15case();
                     break;
            case 16: print16case();
                     break;
            default:
        }
    }
    else 
    {   
        switch(i_opclass)
        {
            case  0: print20case();
                     break;
            case  1: print21case();
                     break;
            case  2: print22case();
                     break;
            case  3: print23case();
                     break;
            case  4: print24case();
                     break;
            case  5: print25case();
                     break;
            default:
        }
    }    
} /* end of nmonicprint() */


int addressfix()
{
    //if (GotEof) return 0;
    if (0<NumberOfBytesProcessed) a_loc = NumberOfBytesProcessed;
    cur_position = getRVA(CodeOffset + a_loc + delta)+imageBase;
    i_mod=0; i_dword=0; m_dword=0;
    return 1;
} /* end of addressprint() */

int addressprint1(int c)
{
static int cc=0;
int        d, dd;
BYTE       b;

    if (GotEof) return 0;    
    //if (nextMode)     return 0;
    if (c>1)  d=1; else  d=c;
    if (cc>1)dd=1; else dd=cc;
    
    if (c!=cc && cc==2 && imb >0)
    {
        bodyprint21(); 
        needspacing=0; imb=0;
        showDots();
    }

    if (d!=dd)
    {
        pr1ntf("\n"); needspacing=0; imb=0;
        showDots();
    }
    else 
    {
        if (needspacing){ pr1ntf("\n"); needspacing=0; }
    }

    
    if (cur_position==entryPoint+imageBase)
        {pr1ntf("\n//******************** Program Entry Point ********");}
    b=getMap(cur_position); 
         if (b&0x80)  printExportName();
    else if (b&0x40)  printEntryMark();
    else if (b==0x2F) printDataMark();
    else if (b==0x2E) printDataMark();
    else if (b==0x2D) printDataMark();
    else if (b&0x20)  printLabelMark();

    if (c!=cc)
    {
        pr2ntf("\n:%08X ", (int)cur_position);
    }
    else 
    {
        if (c<2)
        {pr2ntf("\n:%08X ", (int)cur_position);}
        else if (imb==0)
        { 
            pr2ntf("\n:%08X ", (int)cur_position);
            imb=0;
        }
    }
    cc=c;
    return 1;
} /* end of addressprint() */

int addressprint()
{
    addressfix();
    addressprint1(1);
    return 1;
}

int bodyprint(int c)
{
         if (c==0) bodyprint0();
    else if (c==1) bodyprint1();
    else if (c==2) bodyprint2();
    else if (c==3) bodyprint3();
    else if (c==4) bodyprint4();
    else if (c==5) bodyprint5();
    else if (c==6) bodyprint6();
	return 1;
}

int bodyprint0()
{
int            i,r;
    
    if (GotEof) return 0; 
    if (finished) {finished=0; return 1;}

    r=cur_position;

    //if (nextMode==0)
    for(i=i_col;i<max_col;i++)pr1ntf("  ");

    nmonicprint();

    if (nextMode)
    {
        pushTrace(303);
        if (lclass) EnterLabel(lclass, ref, cur_position);
        popTrace();
        //if (dmc)   fatalError=999,dmc=0;
    }
    else
    {
        if (getMap(r)&0x10) printString();
    }

    lclass = 0;
    ref   = 0;
    dref   = 0;
    a_loc_save=a_loc;
    i_col_save=i_col;
    i_psp=0; 
    i_col=0;
    addressOveride = 0;
    operandOveride = 0;
    printCol = 0;

    return 1;
}

int bodyprint1()
{
int       i, j, n;
    
    if (GotEof) return 0; 

    pushTrace(302);
    if (nextMode>0)
    EnterLabel(166, m_dword, cur_position);
    else
    {
        for(i=i_col;i<max_col;i++)pr1ntf("  ");
        pr2ntf ("DWORD %08X", m_dword); printCol = 14; 
        for(i=printCol;i<26;i++)pr1ntf(" ");
        n=m_dword; pr1ntf(";; "); 
        j=n%256; n/=256; if(isprint(j)){pr2ntf("%c",j);}else {pr1ntf(".");}
        j=n%256; n/=256; if(isprint(j)){pr2ntf("%c",j);}else {pr1ntf(".");}
        j=n%256; n/=256; if(isprint(j)){pr2ntf("%c",j);}else {pr1ntf(".");} 
                         if(isprint(n)){pr2ntf("%c",n);}else {pr1ntf(".");}
    }
    popTrace();

    lclass = 0;
    ref   = 0;
    dref   = 0;
    a_loc_save=a_loc;
    i_col_save=i_col;
    i_psp=0; 
    i_col=0;
    operandOveride = 0;
    printCol=0;
    return 1;
}

int bodyprint2()
{
static int   m=16;
BYTE         b;

    if ((b=getMap(cur_position))&0x30) dmark=cur_position;
   
    switch(lclass)
    {
        case 515: m=16; break;
        case 517: m=10; break;
        case 518: case 528: 
                  m= 8; break;
        case 524: m=4;
        default:  m=16;
    }

    mbytes[imb++]=m_byte;
    if (imb==m || (b=getMap(cur_position+1))==0x2F || b==0x1F) 
        bodyprint21();
    // this place is not good place to process EOF case but it is also very effective.
    //  May.19.1998 sang cho
    if (GotEof)
    { 
        bodyprint21();
        addressfix();
    }
    return 1;
}



int bodyprint21()
{
int           i, j;
unsigned char c;
double        d;
float         f;
char          s[256];
    
    //if (GotEof) return 0; 

    for(i=0;i<imb;i++)pr2ntf("%02X ",mbytes[i]);
    for(   ;i<16; i++)pr1ntf("   "); pr1ntf("  ");

    j=lclass;
    //for(i=i_col;i<max_col;i++)pr1ntf("  ");   
    //    if (j==515) 
    //{
    //}
    //else 
    if (j==517) 
    {
        e64toasc((PWORD)toFile(dmark),s,16);
        pr2ntf(";; %s",s); printCol+=26; if(d<0) printCol++; 
    }
    //else if (j==518) 
    //{
    //}
    else if (j==524)
    {
        f=*(float *)(toFile(dmark));
        if(f>=0.) {pr1ntf(";;  ");} else {pr1ntf(";; ");}
        pr2ntf("%e",f);
    }
    else if (j==528) 
    {
        d=*(double *)(toFile(dmark));
        if(d>=0.) {pr1ntf(";;  ");} else {pr1ntf(";; ");}
        pr2ntf("%23.16e",d); printCol+=26; if(d<0) printCol++; 
    }
    else            
    {
        for(i=0;i<imb;i++)pr2ntf("%c",isprint(c=mbytes[i])?c:'.');
    }
    if (getMap(cur_position+1)==0x1F); else lclass=0;

    imb   = 0;
    //lclass = 0;
    ref   = 0;
    dref   = 0;
    dmark  = 0;
    a_loc_save=a_loc;
    i_col_save=i_col;
    i_psp=0; 
    i_col=0;
    operandOveride = 0;
    return 1;
}


int bodyprint3()
{
    if (GotEof) return 0; 
    
    imb++;

⌨️ 快捷键说明

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