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

📄 print1.c

📁 F:反汇编源码代码学习disasm.ZIP
💻 C
📖 第 1 页 / 共 5 页
字号:
{
int    rr;

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

	switch(i_opcode)
	{
	  	case 0x00: prxntf("add ");    r_m_( 8);  prxntf(", ");  r___( 8);  break; 
	  	case 0x01: prxntf("add ");    r_m_(rr);  prxntf(", ");  r___(rr);  break; 
	  	case 0x02: prxntf("add ");    r___( 8);  prxntf(", ");  r_m_( 8);  break; 
	  	case 0x03: prxntf("add ");    r___(rr);  prxntf(", ");  r_m_(rr);  break; 
	  	case 0x08: prxntf("or ");     r_m_( 8);  prxntf(", ");  r___( 8);  break; 
	  	case 0x09: prxntf("or ");     r_m_(rr);  prxntf(", ");  r___(rr);  break; 
	  	case 0x0A: prxntf("or ");     r___( 8);  prxntf(", ");  r_m_( 8);  break; 
	  	case 0x0B: prxntf("or ");     r___(rr);  prxntf(", ");  r_m_(rr);  break; 
	  	case 0x10: prxntf("adc ");    r_m_( 8);  prxntf(", ");  r___( 8);  break; 
	  	case 0x11: prxntf("adc ");    r_m_(rr);  prxntf(", ");  r___(rr);  break; 
	  	case 0x12: prxntf("adc ");    r___( 8);  prxntf(", ");  r_m_( 8);  break; 
	  	case 0x13: prxntf("adc ");    r___(rr);  prxntf(", ");  r_m_(rr);  break; 
	  	case 0x18: prxntf("sbb ");    r_m_( 8);  prxntf(", ");  r___( 8);  break; 
	  	case 0x19: prxntf("sbb ");    r_m_(rr);  prxntf(", ");  r___(rr);  break; 
	  	case 0x1A: prxntf("sbb ");    r___( 8);  prxntf(", ");  r_m_( 8);  break; 
	  	case 0x1B: prxntf("sbb ");    r___(rr);  prxntf(", ");  r_m_(rr);  break; 
	  	case 0x20: prxntf("and ");    r_m_( 8);  prxntf(", ");  r___( 8);  break; 
	  	case 0x21: prxntf("and ");    r_m_(rr);  prxntf(", ");  r___(rr);  break; 
	  	case 0x22: prxntf("and ");    r___( 8);  prxntf(", ");  r_m_( 8);  break; 
	  	case 0x23: prxntf("and ");    r___(rr);  prxntf(", ");  r_m_(rr);  break; 
	  	case 0x28: prxntf("sub ");    r_m_( 8);  prxntf(", ");  r___( 8);  break; 
	  	case 0x29: prxntf("sub ");    r_m_(rr);  prxntf(", ");  r___(rr);  break; 
	  	case 0x2A: prxntf("sub ");    r___( 8);  prxntf(", ");  r_m_( 8);  break; 
	  	case 0x2B: prxntf("sub ");    r___(rr);  prxntf(", ");  r_m_(rr);  break; 
	  	case 0x30: prxntf("xor ");    r_m_( 8);  prxntf(", ");  r___( 8);  break; 
	  	case 0x31: prxntf("xor ");    r_m_(rr);  prxntf(", ");  r___(rr);  break; 
	  	case 0x32: prxntf("xor ");    r___( 8);  prxntf(", ");  r_m_( 8);  break; 
	  	case 0x33: prxntf("xor ");    r___(rr);  prxntf(", ");  r_m_(rr);  break; 
	  	case 0x38: prxntf("cmp ");    r_m_( 8);  prxntf(", ");  r___( 8);  break; 
	  	case 0x39: prxntf("cmp ");    r_m_(rr);  prxntf(", ");  r___(rr);  break; 
	  	case 0x3A: prxntf("cmp ");    r___( 8);  prxntf(", ");  r_m_( 8);  break; 
	  	case 0x3B: prxntf("cmp ");    r___(rr);  prxntf(", ");  r_m_(rr);  break; 
	  	case 0x62: prxntf("bound ");  r___(rr);  prxntf(", ");  m32_32();  break; 
	  	case 0x63: prxntf("arpl ");   r_m_(16);  prxntf(", ");  r___(16);  break; 
	  	case 0x84: prxntf("test ");   r_m_( 8);  prxntf(", ");  r___( 8);  break; 
	  	case 0x85: prxntf("test ");   r_m_(rr);  prxntf(", ");  r___(rr);  break; 
	  	case 0x86: prxntf("xchg ");   r_m_( 8);  prxntf(", ");  r___( 8);  break; 
	  	case 0x87: prxntf("xchg ");   r_m_(rr);  prxntf(", ");  r___(rr);  break; 
	  	case 0x88: prxntf("mov ");    r_m_( 8);  prxntf(", ");  r___( 8);  break; 
	  	case 0x89: prxntf("mov ");    r_m_(rr);  prxntf(", ");  r___(rr);  break; 
	  	case 0x8A: prxntf("mov ");    r___( 8);  prxntf(", ");  r_m_( 8);  break; 
	  	case 0x8B: prxntf("mov ");    r___(rr);  prxntf(", ");  ref=r_m_(rr); 
				   reg=regTable[i_mod]; tempref[reg]=ref; temppos[reg]=cur_position;
				   break; 
	  	case 0x8C: prxntf("mov ");    r_m_(rr);  prxntf(", ");  Sreg__();  break; 
	  	case 0x8D: prxntf("lea ");    r___(rr);  prxntf(", ");  m_____();  break; 
	  	case 0x8E: prxntf("mov ");    Sreg__();  prxntf(", ");  r_m_(16);  break; 
	  	case 0xC4: prxntf("les es:"); r___(rr);  prxntf(", ");  m16_32();  break; 
	  	case 0xC5: prxntf("lds es:"); r___(rr);  prxntf(", ");  m16_32();  break;
		default:   fatalError=113;return -1;
	}
	return 0;
}

int print7case()
{
int    rr;

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

    prxntf("imul "); r___(rr); 
	if (modTable[i_mod]<8 || regTable[i_mod]!=rmTable[i_mod])
	{   prxntf(", "); r_m_(rr); }
	prxntf(", "); 
	print_i_byte();
	return 0;
}

int print8case()
{
int    rr;

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

    prxntf("imul "); r___(rr); 
	if (modTable[i_mod]<8 || regTable[i_mod]!=rmTable[i_mod])
	{   prxntf(", "); r_m_(rr); }
	prxntf(", "); 
	print_i_dword();
	return 0;
}

int print9case()
{
int    rr;

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

    specifierFlag = my_ON;
    switch(i_opcode)
	{
	    case 0x8F: 
		           if (regTable[i_mod]>0)
		           {  
				       fatalError=115;
					   specifierFlag = my_OFF;
					   return -1;
				   }
				   prxntf("pop "); r_m_(rr); 
				   break;
		case 0xD0:
		           switch(regTable[i_mod])
				   {
				       case 0: prxntf("rol "); r_m_( 8); prxntf(", 1");	break;
					   case 1: prxntf("ror "); r_m_( 8); prxntf(", 1");	break;
					   case 2: prxntf("rcl "); r_m_( 8); prxntf(", 1");	break;
					   case 3: prxntf("rcr "); r_m_( 8); prxntf(", 1");	break;
					   case 4: prxntf("shl "); r_m_( 8); prxntf(", 1");	break;
					   case 5: prxntf("shr "); r_m_( 8); prxntf(", 1");	break;
					   case 7: prxntf("sar "); r_m_( 8); prxntf(", 1");	break;
					   default:	fatalError=117;
				   }
				   break;
		case 0xD1:
		           switch(regTable[i_mod])
				   {
				       case 0: prxntf("rol "); r_m_(rr); prxntf(", 1");	break;
					   case 1: prxntf("ror "); r_m_(rr); prxntf(", 1");	break;
					   case 2: prxntf("rcl "); r_m_(rr); prxntf(", 1");	break;
					   case 3: prxntf("rcr "); r_m_(rr); prxntf(", 1");	break;
					   case 4: prxntf("shl "); r_m_(rr); prxntf(", 1");	break;
					   case 5: prxntf("shr "); r_m_(rr); prxntf(", 1");	break;
					   case 7: prxntf("sar "); r_m_(rr); prxntf(", 1");	break;
					   default:	fatalError=118;
				   }
				   break;
		case 0xD2:
		           switch(regTable[i_mod])
				   {
				       case 0: prxntf("rol "); r_m_( 8); prxntf(", cl"); break;
					   case 1: prxntf("ror "); r_m_( 8); prxntf(", cl"); break;
					   case 2: prxntf("rcl "); r_m_( 8); prxntf(", cl"); break;
					   case 3: prxntf("rcr "); r_m_( 8); prxntf(", cl"); break;
					   case 4: prxntf("shl "); r_m_( 8); prxntf(", cl"); break;
					   case 5: prxntf("shr "); r_m_( 8); prxntf(", cl"); break;
					   case 7: prxntf("sar "); r_m_( 8); prxntf(", cl"); break;
					   default:	fatalError=119;
				   }
				   break;
		case 0xD3:
		           switch(regTable[i_mod])
				   {
				       case 0: prxntf("rol "); r_m_(rr); prxntf(", cl"); break;
					   case 1: prxntf("ror "); r_m_(rr); prxntf(", cl"); break;
					   case 2: prxntf("rcl "); r_m_(rr); prxntf(", cl"); break;
					   case 3: prxntf("rcr "); r_m_(rr); prxntf(", cl"); break;
					   case 4: prxntf("shl "); r_m_(rr); prxntf(", cl"); break;
					   case 5: prxntf("shr "); r_m_(rr); prxntf(", cl"); break;
					   case 7: prxntf("sar "); r_m_(rr); prxntf(", cl"); break;
					   default:	fatalError=121;
				   }
				   break;
		case 0xFE:
		           switch(regTable[i_mod])
				   {
				       case 0: prxntf("inc "); r_m_( 8); break;
					   case 1: prxntf("dec "); r_m_( 8); break;
					   default: fatalError=123;
				   }
				   break;
		default: fatalError=125;
	}
	specifierFlag=my_OFF;
	return 0;
}

int print10case()
{
int    rr;

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

    switch(i_opcode)
	{
	    case 0x80: 
		           switch(regTable[i_mod])
				   {
				       case 0: prxntf("add "); r_m_( 8); prxntf(", "); break;
					   case 1: prxntf("or ");  r_m_( 8); prxntf(", "); break;
					   case 2: prxntf("adc "); r_m_( 8); prxntf(", "); break;
					   case 3: prxntf("sbb "); r_m_( 8); prxntf(", "); break;
					   case 4: prxntf("and "); r_m_( 8); prxntf(", "); break;
					   case 5: prxntf("sub "); r_m_( 8); prxntf(", "); break;
					   case 6: prxntf("xor "); r_m_( 8); prxntf(", "); break;
					   case 7: prxntf("cmp "); r_m_( 8); prxntf(", "); break;
					   default:	fatalError=127;
				   }
				   print_i_byte();
				   break;
		case 0x83:
		           switch(regTable[i_mod])
				   {
				       case 0: prxntf("add "); r_m_(rr); prxntf(", "); break;
					   case 1: prxntf("or ");  r_m_(rr); prxntf(", "); break;
					   case 2: prxntf("adc "); r_m_(rr); prxntf(", "); break;
					   case 3: prxntf("sbb "); r_m_(rr); prxntf(", "); break;
					   case 4: prxntf("and "); r_m_(rr); prxntf(", "); break;
					   case 5: prxntf("sub "); r_m_(rr); prxntf(", "); break;
					   case 6: prxntf("xor "); r_m_(rr); prxntf(", "); break;
					   case 7: prxntf("cmp "); r_m_(rr); prxntf(", "); break;
					   default:	fatalError=129;
				   }
				   print_i_byte32();
				   break;
		           
		case 0xC0:
		           switch(regTable[i_mod])
				   {
				       case 0: prxntf("rol "); r_m_( 8); prxntf(", "); break;
					   case 1: prxntf("ror "); r_m_( 8); prxntf(", "); break;
					   case 2: prxntf("rcl "); r_m_( 8); prxntf(", "); break;
					   case 3: prxntf("rcr "); r_m_( 8); prxntf(", "); break;
					   case 4: prxntf("shl "); r_m_( 8); prxntf(", "); break;
					   case 5: prxntf("shr "); r_m_( 8); prxntf(", "); break;
					   case 7: prxntf("sar "); r_m_( 8); prxntf(", "); break;
					   default:	fatalError=131;
				   }
				   print_i_byte();
				   break;
		case 0xC1:
		           switch(regTable[i_mod])
				   {
				       case 0: prxntf("rol "); r_m_(rr); prxntf(", "); break;
					   case 1: prxntf("ror "); r_m_(rr); prxntf(", "); break;
					   case 2: prxntf("rcl "); r_m_(rr); prxntf(", "); break;
					   case 3: prxntf("rcr "); r_m_(rr); prxntf(", "); break;
					   case 4: prxntf("shl "); r_m_(rr); prxntf(", "); break;
					   case 5: prxntf("shr "); r_m_(rr); prxntf(", "); break;
					   case 7: prxntf("sar "); r_m_(rr); prxntf(", "); break;
					   default:	fatalError=133;
				   }
				   print_i_byte();
				   break;
		case 0xC6:
		           if (regTable[i_mod]==0)
				   {
				       prxntf("mov "); r_m_( 8); 
					   prxntf(", "); print_i_byte();
				   }
				   else fatalError=135;
				   break;
		default: fatalError=137;
	}
	return 0;
}

int print11case()  
{
int    rr;

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

	if (i_opcode==0xC7)
	{
	    if (regTable[i_mod]>0)
		{
		    fatalError=139;
		    return -1;
		}
		prxntf("mov "); r_m_(rr); prxntf(", "); 
		ref=print_i_dword();
		class=1024;
		return 0;
	}
	else		/* is should be 0x81 otherwise i*am*in*big*trouble */
	{
	    switch(regTable[i_mod])
		{
		    case 0: prxntf("add "); r_m_(rr); prxntf(", "); print_i_dword(); break;
			case 1: prxntf("or ");  r_m_(rr); prxntf(", "); print_i_dword(); break;
			case 2: prxntf("adc "); r_m_(rr); prxntf(", "); print_i_dword(); break;
			case 3: prxntf("sbb "); r_m_(rr); prxntf(", "); print_i_dword(); break;
			case 4: prxntf("and "); r_m_(rr); prxntf(", "); print_i_dword(); break;
			case 5: prxntf("sub "); r_m_(rr); prxntf(", "); print_i_dword(); break;
			case 6: prxntf("xor "); r_m_(rr); prxntf(", "); print_i_dword(); break;
			case 7: prxntf("cmp "); r_m_(rr); prxntf(", "); print_i_dword(); break;
			default:   fatalError=141;
		}
	}
	return 0;
}

int print12case()
{
int    rr;

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

    switch(i_opcode)
	{
	    case 0xD8: 
		    if (i_mod<0xC0)
			{
		           switch(regTable[i_mod])
				   {
				       case 0: prxntf("fadd ");  prxntf("32real"); r_m_( 0); break;
					   case 1: prxntf("fmul ");  prxntf("32real"); r_m_( 0); break;
					   case 2: prxntf("fcom ");  prxntf("32real"); r_m_( 0); break;
					   case 3: prxntf("fcomp "); prxntf("32real"); r_m_( 0); break;
					   case 4: prxntf("fsub ");  prxntf("32real"); r_m_( 0); break;
					   case 5: prxntf("fsubr "); prxntf("32real"); r_m_( 0); break;
					   case 6: prxntf("fdiv ");  prxntf("32real"); r_m_( 0); break;
					   case 7: prxntf("fdivr "); prxntf("32real"); r_m_( 0); break;
					   default:	fatalError=143;
				   }
			}
			else
			{
			    if (i_mod<0xC8)       prxntf("fadd st(0), st(%1d)",  i_mod-0xC0);
				else if (i_mod <0xD0) prxntf("fmul st(0), st(%1d)",  i_mod-0xC8);
				else if (i_mod==0xD1) prxntf("fcom");
				else if (i_mod <0xD8) prxntf("fcom st(0), st(%1d)",  i_mod-0xD0);
				else if (i_mod==0xD9) prxntf("fcomp");
				else if (i_mod <0xE0) prxntf("fcomp st(0), st(%1d)", i_mod-0xD8);
				else if (i_mod <0xE8) prxntf("fsub st(0), st(%1d)",  i_mod-0xE0);
				else if (i_mod <0xF0) prxntf("fsubr st(0), st(%1d)", i_mod-0xE8);
				else if (i_mod <0xF8) prxntf("fdiv st(0), st(%1d)",  i_mod-0xF0);
				else                  prxntf("fdivr st(0), st(%1d)", i_mod-0xF8);
			}
			break;
	    case 0xD9: 
		    if (i_mod<0xC0)
			{
		           switch(regTable[i_mod])
				   {
				       case 0: prxntf("fld ");   prxntf("32real"); r_m_( 0); break;
					   case 2: prxntf("fst ");   prxntf("32real"); r_m_( 0); break;
					   case 3: prxntf("fstp ");  prxntf("32real"); r_m_( 0); break;
					   case 4: prxntf("fldenv ");prxntf("14/28byte");r_m_( 0);break;
					   case 5: prxntf("fldcw "); prxntf("2byte");  r_m_( 0); break;
					   case 6: prxntf("fnstenv ");prxntf("14/28byte");r_m_( 0);break;
					   case 7: prxntf("fnstcw ");prxntf("2byte");  r_m_( 0); break;
					   default:	fatalError=145;
				   }
			}
			else
			{
			    if (i_mod<0xC8)       prxntf("fld st(%1d)",  i_mod-0xC0);
				else if (i_mod==0xC9) prxntf("fxch");
				else if (i_mod <0xD0) prxntf("fxch st(%1d)",  i_mod-0xC8);
				else
				{
				    switch(i_mod)
					{
					    case 0xD0: prxntf("fnop");      break;		
						case 0xE0: prxntf("fchs");		break;
						case 0xE1: prxntf("fabs");		break;
						case 0xE4: prxntf("ftst");		break;
						case 0xE5: prxntf("fxam");		break;	
						case 0xE8: prxntf("fld1");		break;
						case 0xE9: prxntf("fldl2t");	break;
						case 0xEA: prxntf("fldl2e");	break;
						case 0xEB: prxntf("fldpi");		break;
						case 0xEC: prxntf("fldlg2");	break;
						case 0xED: prxntf("fldln2");	break;
						case 0xEE: prxntf("fldz");		break;
						case 0xF0: prxntf("f2xm1");		break;
						case 0xF1: prxntf("fyl2x");		break;
						case 0xF2: prxntf("fptan");		break;
						case 0xF3: prxntf("fpatan");	break;
						case 0xF4: prxntf("fxtract");	break;
						case 0xF5: prxntf("fprem1");	break;
						case 0xF6: prxntf("fdecstp");	break;
						case 0xF7: prxntf("fincstp");	break;
						case 0xF8: prxntf("fprem");		break;
						case 0xF9: prxntf("fyl2xp1");	break;
						case 0xFA: prxntf("fsqrt");		break;
						case 0xFB: prxntf("fsincos");	break;
						case 0xFC: prxntf("frndint");	break;
						case 0xFD: prxntf("fscale");	break;
						case 0xFE: prxntf("fsin");		break;
						case 0xFF: prxntf("fcos");		break;
						default:   fatalError=202;
					}
				}
			}
			break;
		case 0xDA: 
			if (i_mod<0xC0)
			{
			       switch(regTable[i_mod])
				   {
				       case 0: prxntf("fiadd ");  r_m_(rr); break;
					   case 1: prxntf("fimul ");  r_m_(rr); break;
					   case 2: prxntf("ficom ");  r_m_(rr); break;
					   case 3: prxntf("ficomp "); r_m_(rr); break;
					   case 4: prxntf("fisub ");  r_m_(rr); break;
					   case 5: prxntf("fisubr "); r_m_(rr); break;
					   case 6: prxntf("fidiv ");  r_m_(rr); break;
					   case 7: prxntf("fidivr "); r_m_(rr); break;
					   default:	fatalError=204;
				   }
			}
			else
			{
			    if (i_mod<0xC8)       prxntf("fcmovb st(0), st(%1d)", i_mod-0xC0);
				else if (i_mod <0xD0) prxntf("fcmove st(0), st(%1d)", i_mod-0xC8);
				else if (i_mod <0xD8) prxntf("fcmovbe st(0), st(%1d)",i_mod-0xD0);
				else if (i_mod <0xE0) prxntf("fcmovu st(0), st(%1d)", i_mod-0xD8);
				else if (i_mod==0xE9) prxntf("fucompp");
			}
			break;
		case 0xDB: 
			if (i_mod<0xC0)
			{
			       switch(regTable[i_mod])
				   {
				       case 0: prxntf("fild ");  r_m_(rr); break;
					   case 2: prxntf("fist ");  r_m_(rr); break;
					   case 3: prxntf("fistp "); r_m_(rr); break;
					   case 5: prxntf("fld ");  prxntf("80real"); r_m_( 0); break;
					   case 7: prxntf("fstp "); prxntf("80real"); r_m_( 0); break;
					   default:	fatalError=206;
				   }

⌨️ 快捷键说明

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