📄 print.c
字号:
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 + -