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

📄 print1.c

📁 F:反汇编源码代码学习disasm.ZIP
💻 C
📖 第 1 页 / 共 5 页
字号:
			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 + -