📄 print1.c
字号:
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 (yytchar==EOF) return 0;
if (0<NumberOfBytesProcessed) a_loc = NumberOfBytesProcessed;
cur_position = imagebaseRVA + a_loc + delta;
return 1;
} /* end of addressprint() */
int addressprint1(int c)
{
static int cc=0;
PBYTE p;
if (yytchar==EOF) return 0;
if (nextMode) return 0;
if (c!=cc)
{
if (cc==2 && imb>0) bodyprint21(); imb=0;
prxntf("\n"); needspacing=0;
if (!nextMode) fprintf(stderr,".");
}
else
{
if (needspacing){ prxntf("\n"); needspacing=0; }
}
if (cur_position==entryPoint+imageBase)
prxntf("\n//******************** Program Entry Point ********");
p=toMap(cur_position);
if (*p&0x80) printExportName();
else if (*p&0x40) printEntryMark();
else if (*p&0x20) printLabelMark();
if (c!=cc)
{
if (cur_position<imagebaseRVA+CodeSize)
prxntf("\n:%08X ", cur_position);
}
else
{
if (c<2)
prxntf("\n:%08X ", cur_position);
else if (imb==0)
{
prxntf("\n:%08X ", 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();
}
int bodyprint0()
{
int i,r;
BYTE c;
PBYTE p, q;
if (yytchar==EOF) return 0;
if (finished) {finished=0; return 1;}
r=imagebaseRVA+a_loc_save+delta;
p=toMap(r);
if (nextMode)
{
q=toFile(r);
if (i_opcode==0xCC) *p= 0x0C;
else
{
if (nextMode<3)
{
*p |= 0x05;
for(i=1;i<i_col;i++)
if(*(p+i)&0x40)
{
fatalError=900;
break;
}
else *(p+i) |= 0x04;
}
else
{
*p |= 0x07;
for(i=1;i<i_col;i++)
if(*(p+i)&0x40)
{
fatalError=900;
break;
}
else *(p+i) |= 0x06;
}
if(fatalError==0)
for(i=1;i<i_col;i++)
if (*(p+i)&0x20)
{dmLabels[dmc++]=r+i;*(p+i)^=0x20;}
}
}
else for(i=i_col;i<max_col;i++)prxntf(" ");
nmonicprint();
if (nextMode)
{
if (class) EnterLabel(class, ref, cur_position);
if (dmc) fatalError=999;
}
else
{
if (*p&0x10) printString();
}
class = 0;
ref = 0;
a_loc_save=a_loc;
i_col_save=i_col;
i_psp=0;
i_col=0;
addressOveride = 0;
operandOveride = 0;
return 1;
}
int bodyprint1()
{
int i;
if (yytchar==EOF) return 0;
if (nextMode>0)
EnterLabel(166, m_dword, cur_position);
else
{
for(i=i_col;i<max_col;i++)prxntf(" ");
prxntf ("DWORD %08X", m_dword);
}
class = 0;
ref = 0;
a_loc_save=a_loc;
i_col_save=i_col;
i_psp=0;
i_col=0;
operandOveride = 0;
return 1;
}
int bodyprint2()
{
mbytes[imb++]=m_byte;
if (imb==16)
bodyprint21();
return 1;
}
int bodyprint21()
{
int i;
unsigned char c;
if (yytchar==EOF) return 0;
if (nextMode==0)
{
for(i=0;i<imb;i++)prxntf("%02X ",mbytes[i]);
for( ;i<16; i++)prxntf(" "); prxntf(" ");
for(i=0;i<imb;i++)prxntf("%c",isprint(c=mbytes[i])?c:'.');
}
imb = 0;
class = 0;
ref = 0;
a_loc_save=a_loc;
i_col_save=i_col;
i_psp=0;
i_col=0;
operandOveride = 0;
return 1;
}
int bodyprint3()
{
if (yytchar==EOF) return 0;
imb++;
class = 0;
ref = 0;
a_loc_save=a_loc;
i_col_save=i_col;
i_psp=0;
i_col=0;
operandOveride = 0;
return 1;
}
int isEntry(int pos)
{
PBYTE p=toMap(pos);
if ((imagebaseRVA<=pos)&&(pos<imagebaseRVA+CodeSize)
&&((*p&0x40)==0x40)) return 1;
else return 0;
}
int GotName(int pos, int pos1)
{
int r;
char *p;
_key_ k;
PKEY pk;
r=-pos;
if ((int)lpFile<r&&r<(int)lpFile+fsize)
{
k.c_ref=pos; k.c_pos=0; k.class=0;
pk = searchBtree1(&k);
if ((pk!=NULL)&&((int)piNameBuff<=pk->c_pos)
&&(pk->c_pos<(int)piNameBuff+piNameBuffSize))
{
p=strtok((char *)(pk->c_pos),".");
prxntf("%s",p);prxntf(".");
p=TranslateFunctionName((char *)r);
prxntf("%s",p);
return 1;
}
}
if ((int)peNameBuff<r&&r<(int)peNameBuff+peNameBuffSize)
{
p=TranslateFunctionName((char *)r);
prxntf("%s",p);
return 1;
}
if (isEntry(pos1))
{
prxntf("%08X",pos1);
return 1;
}
return 0;
}
int printName(int pos)
{
int r, rr;
_key_ k, k1, k2, k3, k4;
PKEY pk;
// this is very tricky.. i need to be extremely careful. oct.31,1997sangcho
k.c_ref=pos; k.c_pos=0; k.class=0;
pk = searchBtree1(&k);
if(pk==NULL) return 0;
k1=*pk;
if (AddressCheck(k1.c_pos))
{
r=k1.c_pos;
k.c_ref=r; k.c_pos=0; k.class=0;
pk = searchBtree1(&k);
if(pk==NULL)
{
if (isEntry(k1.c_pos))
{
prxntf("%08X",k1.c_pos);
return 1;
}
return 0;
}
k2=*pk;
if (k2.c_pos<0) return GotName(k2.c_pos, k1.c_pos);
k.c_ref=k2.c_pos; k.c_pos=0; k.class=0;
pk = searchBtree1(&k);
if(pk==NULL)
{
if (isEntry(k1.c_pos))
{
prxntf("%08X",k1.c_pos);
return 1;
}
return 0;
}
k3=*pk;
return GotName(k3.c_pos, k1.c_pos);
}
else
{
k2=*pk;
k.c_ref=k2.c_pos; k.c_pos=0; k.class=0;
pk = searchBtree1(&k);
if(pk==NULL)
{
if (isEntry(k1.c_pos))
{
prxntf("%08X",k1.c_pos);
return 1;
}
return 0;
}
k3=*pk;
return GotName(k3.c_pos, k1.c_pos);
}
return 1;
}
int printExportName1(int ref)
{
int r, rr;
_key_ k;
PKEY pk;
PBYTE p;
k.c_ref=ref; k.c_pos=0; k.class=0;
pk = searchBtree1(&k);
if(pk==NULL) return 0;
r=-(pk->c_pos);
if ((int)peNameBuff<r&&r<(int)peNameBuff+peNameBuffSize)
{
p=TranslateFunctionName((char *)r);
prxntf("%s",p);
}
return 1;
}
int printExportName()
{
PBYTE p, q;
q=toFile(cur_position);
if (*q==0xC3)
{
p=toMap(cur_position);
if (*p&0x40) return printEntryMark();
if (*p&0x20) return printLabelMark();
return 1;
}
prxntf("\n=========\n");
printExportName1(cur_position);
prxntf("\n=========");
return 1;
}
int printEntryMark()
{
prxntf("\n=========");
}
int printLabelMark()
{
prxntf("\n---------");
}
int printString()
{
int r, rr;
_key_ k;
PKEY pk;
PBYTE p;
k.c_ref=cur_position; k.c_pos=0; k.class=0;
pk = searchBtree1(&k);
if(pk==NULL) return 0;
r=pk->c_pos;
p=toFile(r);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -