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

📄 print1.c

📁 F:反汇编源码代码学习disasm.ZIP
💻 C
📖 第 1 页 / 共 5 页
字号:
	prxntf("\n                      (StringData)\"%s\"",p);
	return 1;
}

int print0case()  
{			 	
	switch(i_opcode)
	{
		case 0x06:  prxntf("push es"); break;   
		case 0x07:  prxntf("pop es"); break;   
		case 0x0E:  prxntf("push cs"); break;   
		case 0x16:  prxntf("push ss"); break; 	
		case 0x17:  prxntf("pop ss"); break;	
		case 0x1E:  prxntf("push ds"); break; 	
		case 0x1F:  prxntf("pop ds"); break;	
		case 0x27:  prxntf("daa"); break; 
		case 0x2F:  prxntf("das"); break;     
		case 0x37:  prxntf("aaa"); break;     
		case 0x3F:  prxntf("aas"); break;     
		case 0x40:  if (operandOveride) prxntf("inc ax");
		            else                prxntf("inc eax"); 
					break;   
		case 0x41:  if (operandOveride) prxntf("inc cx");
		            else                prxntf("inc ecx"); 
					break;   
		case 0x42:  if (operandOveride) prxntf("inc dx");
		            else                prxntf("inc edx"); 
					break;     
		case 0x43:  if (operandOveride) prxntf("inc bx");
		            else                prxntf("inc ebx"); 
					break;   
		case 0x44:  if (operandOveride) prxntf("inc sp");
		            else                prxntf("inc esp"); 
					break;   
		case 0x45:  if (operandOveride) prxntf("inc bp");
		            else                prxntf("inc ebp"); 
					break;   
		case 0x46:  if (operandOveride) prxntf("inc si");
		            else                prxntf("inc esi"); 
					break;   
		case 0x47:  if (operandOveride) prxntf("inc di");
		            else                prxntf("inc edi"); 
					break;  
		case 0x48:  if (operandOveride) prxntf("dec ax");
		            else                prxntf("dec eax"); 
					break;   
		case 0x49:  if (operandOveride) prxntf("dec cx");
		            else                prxntf("dec ecx"); 
					break;   
		case 0x4A:  if (operandOveride) prxntf("dec dx");
		            else                prxntf("dec edx"); 
					break;     
		case 0x4B:  if (operandOveride) prxntf("dec bx");
		            else                prxntf("dec ebx"); 
					break;   
		case 0x4C:  if (operandOveride) prxntf("dec sp");
		            else                prxntf("dec esp"); 
					break;   
		case 0x4D:  if (operandOveride) prxntf("dec bp");
		            else                prxntf("dec ebp"); 
					break;   
		case 0x4E:  if (operandOveride) prxntf("dec si");
		            else                prxntf("dec esi"); 
					break;   
		case 0x4F:  if (operandOveride) prxntf("dec di");
		            else                prxntf("dec edi"); 
					break; 
		case 0x50:  if (operandOveride) prxntf("push ax");
		            else                prxntf("push eax"); 
					break;   
		case 0x51:  if (operandOveride) prxntf("push cx");
		            else                prxntf("push ecx"); 
					break;   
		case 0x52:  if (operandOveride) prxntf("push dx");
		            else                prxntf("push edx"); 
					break;     
		case 0x53:  if (operandOveride) prxntf("push bx");
		            else                prxntf("push ebx"); 
					break;   
		case 0x54:  if (operandOveride) prxntf("push sp");
		            else                prxntf("push esp"); 
					break;   
		case 0x55:  if (operandOveride) prxntf("push bp");
		            else                prxntf("push ebp"); 
					break;   
		case 0x56:  if (operandOveride) prxntf("push si");
		            else                prxntf("push esi"); 
					break;   
		case 0x57:  if (operandOveride) prxntf("push di");
		            else                prxntf("push edi"); 
					break;  
		case 0x58:  if (operandOveride) prxntf("pop ax");
		            else                prxntf("pop eax"); 
					break;   
		case 0x59:  if (operandOveride) prxntf("pop cx");
		            else                prxntf("pop ecx"); 
					break;   
		case 0x5A:  if (operandOveride) prxntf("pop dx");
		            else                prxntf("pop edx"); 
					break;     
		case 0x5B:  if (operandOveride) prxntf("pop bx");
		            else                prxntf("pop ebx"); 
					break;   
		case 0x5C:  if (operandOveride) prxntf("pop sp");
		            else                prxntf("pop esp"); 
					break;   
		case 0x5D:  if (operandOveride) prxntf("pop bp");
		            else                prxntf("pop ebp"); 
					break;   
		case 0x5E:  if (operandOveride) prxntf("pop si");
		            else                prxntf("pop esi"); 
					break;   
		case 0x5F:  if (operandOveride) prxntf("pop di");
		            else                prxntf("pop edi"); 
					break; 
		case 0x60:  prxntf("pushad"); break;  
		case 0x61:  prxntf("popad");  break;   
		case 0x6C:  prxntf("ins byte, port[dx]"); break;   
		case 0x6D:  prxntf("ins dword, port[dx]"); break;   
		case 0x6E:  prxntf("outs port[dx], byte"); break; 	
		case 0x6F:  prxntf("outs port[dx], dword"); break;	
		case 0x90:  prxntf("nop");        break; 	
		case 0x91:  if (operandOveride)	prxntf("xchg ax, cx");
		            else                prxntf("xchg eax, ecx"); 
					break;	
		case 0x92:  if (operandOveride)	prxntf("xchg ax, dx");
		            else                prxntf("xchg eax, edx"); 
					break; 
		case 0x93:  if (operandOveride)	prxntf("xchg ax, bx");
		            else                prxntf("xchg eax, ebx"); 
					break;     
		case 0x94:  if (operandOveride)	prxntf("xchg ax, sp");
		            else                prxntf("xchg eax, esp"); 
					break;     
		case 0x95:  if (operandOveride)	prxntf("xchg ax, bp");
		            else                prxntf("xchg eax, ebp"); 
					break;     
		case 0x96:  if (operandOveride)	prxntf("xchg ax, si");
		            else                prxntf("xchg eax, esi"); 
					break;   
		case 0x97:  if (operandOveride)	prxntf("xchg ax, di"); 
		            else                prxntf("xchg eax, edi"); 
					break;   
		case 0x98:  prxntf("cbw");    break;   
		case 0x99:  if (operandOveride)	prxntf("cwd");
		            else                prxntf("cdq");    
					break;   
		case 0x9C:  prxntf("pushfd");    break;   
		case 0x9D:  prxntf("popfd");    break;   
		case 0x9E:  prxntf("sahf");    break;   
		case 0x9F:  prxntf("lahf");  break;   
		case 0xA4:  prxntf("movsb");  break;   
		case 0xA5:  if (operandOveride) prxntf ("movsw");
		            else                prxntf ("movsd");  
					break;   
		case 0xA6:  prxntf("cmpsb");  break;   
		case 0xA7:  if (operandOveride) prxntf ("cmpsw");
		            else                prxntf ("cmpsd"); 
		            break;   
		case 0xAA:  prxntf("stosb"); break;
		case 0xAB:  if (operandOveride) prxntf ("stosw");
		            else                prxntf ("stosd"); 
		            break;    
		case 0xAC:  prxntf("lodsb"); break;   
		case 0xAD:  if (operandOveride) prxntf ("lodsw");
		            else                prxntf ("lodsd"); 
		            break;   
		case 0xAE:  prxntf("scasb"); break;   
		case 0xAF:  if (operandOveride) prxntf ("scasw");
		            else                prxntf ("scasd"); 
		            break;   
		case 0xC3:  prxntf("ret");  needspacing=1;  
		            lastAnchor=cur_position+i_col-1;
					*(unsigned char *)((int)lpMap+a_loc_save+delta+i_col-1) |= 0x80;
					break;   
		case 0xC9:  prxntf("leave");  break;   
		case 0xCB:  prxntf("ret(far)");	needspacing=1;
		            lastAnchor=cur_position+i_col-1;
					*(unsigned char *)((int)lpMap+a_loc_save+delta+i_col-1) |= 0x80;
					//leaveFlag=cur_position+i_col;
		            break;   
		case 0xCC:  prxntf("int 03"); break;   
		case 0xCE:  prxntf("into"); break;   
		case 0xCF:  if (operandOveride) prxntf ("iret");
		            else                prxntf ("iretd"); 
		            break;   
		case 0xD7:  prxntf("xlatb"); break;   
		case 0xEC:  prxntf("in al, port[dx]"); break;   
		case 0xED:  if (operandOveride) prxntf ("in ax, port[dx]");
		            else                prxntf ("in eax, port[dx]"); 
					break;   
		case 0xEE:  prxntf("out port[dx], al"); break;   
		case 0xEF:  if (operandOveride) prxntf ("out port[dx], ax");
		            else                prxntf ("out port[dx], eax"); 
					break;   
		case 0xF0:  prxntf("lock"); break;   
		case 0xF4:  prxntf("hlt"); break;   
		case 0xF5:  prxntf("cmc"); break;   
		case 0xF8:  prxntf("clc"); break;  
		case 0xF9:  prxntf("stc"); break;   
		case 0xFA:  prxntf("cli"); break;   
		case 0xFB:  prxntf("sti"); break;   
		case 0xFC:  prxntf("cld"); break; 	
		case 0xFD:  prxntf("std"); break;
		default:    fatalError=107;return -1;
	}
	return 0;
}

int print1case()
{
	switch(i_opcode)
	{
		case 0x04:  prxntf("add al, ");    print_i_byte(); break;   
		case 0x0C:  prxntf("or al, ");     print_i_byte(); break;   
		case 0x14:  prxntf("adc al, ");    print_i_byte(); break;   
		case 0x1C:  prxntf("sbb al, ");    print_i_byte(); break; 	
		case 0x24:  prxntf("and al, ");    print_i_byte(); break;	
		case 0x2C:  prxntf("sub al, ");    print_i_byte(); break; 	
		case 0x34:  prxntf("xor al, ");    print_i_byte(); break;	
		case 0x3C:  prxntf("cmp al, ");    print_i_byte(); break; 
		case 0x6A:  prxntf("push ");       print_i_byte32(); break;     
		case 0x70:  prxntf("jo ");         print_rel8();   break;     
		case 0x71:  prxntf("jno ");        print_rel8();   break;     
		case 0x72:  prxntf("jc ");         print_rel8();   break;   
		case 0x73:  prxntf("jae ");        print_rel8();   break;   
		case 0x74:  prxntf("je ");         print_rel8();   break;   
		case 0x75:  prxntf("jne ");        print_rel8();   break;   
		case 0x76:  prxntf("jbe ");        print_rel8();   break;   
		case 0x77:  prxntf("ja ");         print_rel8();   break;   
		case 0x78:  prxntf("js ");         print_rel8();   break;   
		case 0x79:  prxntf("jns ");        print_rel8();   break;   
		case 0x7A:  prxntf("jpe ");        print_rel8();   break;   
		case 0x7B:  prxntf("jpo ");        print_rel8();   break;   
		case 0x7C:  prxntf("jl ");         print_rel8();   break;   
		case 0x7D:  prxntf("jge ");        print_rel8();   break;   
		case 0x7E:  prxntf("jle ");        print_rel8();   break;   
		case 0x7F:  prxntf("jg ");         print_rel8();   break;   
		case 0xA8:  prxntf("test al, ");   print_i_byte(); break;   
		case 0xB0:  prxntf("mov al, ");    print_i_byte(); break;   
		case 0xB1:  prxntf("mov cl, ");    print_i_byte(); break;   
		case 0xB2:  prxntf("mov dl, ");    print_i_byte(); break;   
		case 0xB3:  prxntf("mov bl, ");    print_i_byte(); break;   
		case 0xB4:  prxntf("mov ah, ");    print_i_byte(); break;   
		case 0xB5:  prxntf("mov ch, ");    print_i_byte(); break;   
		case 0xB6:  prxntf("mov dh, ");    print_i_byte(); break;   
		case 0xB7:  prxntf("mov bh, ");    print_i_byte(); break;   
		case 0xCD:  prxntf("int ");        print_i_byte(); break;   
		case 0xD4:  prxntf("aam ");                        break;   
		case 0xD5:  prxntf("aad ");                        break;   
		case 0xE0:  prxntf("loopne ");     print_rel8();   break;   
		case 0xE1:  prxntf("loope ");      print_rel8();   break;   
		case 0xE2:  prxntf("loop ");       print_rel8();   break;   
		case 0xE3:  prxntf("jecxz ");      print_rel8();   break;   
		case 0xE4:  prxntf("in al, port["); print_i_byte(); prxntf("]");break;   
		case 0xE5:  prxntf("in eax, port[");print_i_byte(); prxntf("]");break;   
		case 0xE6:  prxntf("out port["); print_i_byte(); prxntf("], al");    break;   
		case 0xE7:  prxntf("out port["); print_i_byte(); prxntf("], eax");   break;
		case 0xEB:  prxntf("jmp ");        print_rel8();  
					if (nextMode>2 && referCount(ref)>3)
					{
					    lastAnchor=cur_position+i_col-1;
					    *(unsigned char *)((int)lpMap+a_loc_save+delta+i_col-1) |= 0x80;
					}
					break;
		default:    fatalError=109;return -1;
	}
	return 0;

}

int print2case()
{
    if (i_opcode==0xC2)
	{
	    prxntf("ret %04X", i_word);	needspacing=1;
	}
	else
	{
	    prxntf("ret %04X", i_word);	needspacing=1;
	}
	lastAnchor = cur_position+i_col-1;
	*(unsigned char *)((int)lpMap+a_loc_save+delta+i_col-1) |= 0x80;
	//leaveFlag=cur_position+i_col;
	return 0;
}

int print3case()
{
	prxntf("enter %04X, ", i_word); print_i_byte();
	return 0;
}

int print4case()
{
	switch(i_opcode)
	{
		case 0x05:  if (operandOveride) prxntf ("add ex, ");
		            else                prxntf ("add eax, ");   
		            print_i_dword();     
					break;   
		case 0x0D:  if (operandOveride)	prxntf ("or ax, ");
		            else                prxntf ("or eax, ");    
		            print_i_dword();     
					break;   
		case 0x15:  if (operandOveride)	prxntf ("adc ax, ");
		            else                prxntf ("adc eax, ");   
		            print_i_dword();     
					break;   
		case 0x1D:  if (operandOveride)	prxntf ("sbb ax, ");
		            else                prxntf ("sbb eax, ");   
		            print_i_dword();     
					break; 	
		case 0x25:  if (operandOveride)	prxntf ("and ax, "); 
		            else                prxntf ("and eax, ");   
		            print_i_dword();     
					break; 
		case 0x2D:  if (operandOveride)	prxntf ("sub ax, ");
		            else                prxntf ("sub eax, ");   
		            print_i_dword();     
					break;  	
		case 0x35:  if (operandOveride)	prxntf ("xor ax, ");
		            else                prxntf ("xor eax, ");   
		            print_i_dword();     
					break;	 
		case 0x3D:  if (operandOveride)	prxntf ("cmp ax, ");
		            else                prxntf ("cmp eax, ");   
		            print_i_dword();     
					break;  
		case 0x68:  prxntf("push ");    ref=print_i_dword();     // this is OK 
		// well I really don't know it is reasonably safe to do this.
		// I think when we push some (possible) address references into stack
		// there is strong reason to do so. that's why i am doing this. i guess...
		            class=512;          
		            break;     
		case 0xA0:  prxntf("mov al, byte");    print_moff();        
		            break;     
		case 0xA1:  if (operandOveride)	prxntf ("mov ax, word");
		            else                prxntf ("mov eax, dword");   
		            print_moff();        
					break;     
		case 0xA2:  prxntf("mov byte");print_moff();prxntf(", al"); 
		            break;
		case 0xA3:  if (operandOveride) prxntf("mov word");
		            else                prxntf("mov dword");
		            print_moff();
		            if (operandOveride)	prxntf (", ax");
					else                prxntf (", eax");
					break;
		case 0xA9:  if (operandOveride)	prxntf ("test ax, ");
		            else                prxntf ("test eax, ");  
		            print_i_dword();     
					break;   
		case 0xB8:  if (operandOveride)	prxntf ("mov ax, ");
		            else                prxntf ("mov eax, ");   
		            ref=print_i_dword();class=1024;     
					break;   
		case 0xB9:  if (operandOveride)	prxntf ("mov cx, ");
		            else                prxntf ("mov ecx, ");   
		            ref=print_i_dword();class=1024;     
					break;   
		case 0xBA:  if (operandOveride)	prxntf ("mov dx, "); 
		            else                prxntf ("mov edx, ");   
		            ref=print_i_dword();class=1024;     
					break;   
		case 0xBB:  if (operandOveride)	prxntf ("mov bx, ");
		            else                prxntf ("mov ebx, ");   
		            ref=print_i_dword();class=1024;     
					break;   
		case 0xBC:  if (operandOveride)	prxntf ("mov sp, ");
		            else                prxntf( "mov esp, ");   
		            ref=print_i_dword();class=1024;     
					break;   
		case 0xBD:  if (operandOveride)	prxntf ("mov bp, ");
		            else                prxntf("mov ebp, ");   
		            ref=print_i_dword();class=1024;     
					break;   
		case 0xBE:  if (operandOveride)	prxntf ("mov si, "); 
		            else                prxntf("mov esi, ");   
		            ref=print_i_dword();class=1024;     
					break;   
		case 0xBF:  if (operandOveride)	prxntf ("mov di, "); 
		            else                prxntf("mov edi, ");   
		            ref=print_i_dword();class=1024;     
					break;   
		case 0xE8:  prxntf("call "); 
		            if (nextMode) {
					    ref = print_rel32();       
		                class = 11; 
					}
					else if (!printName(cur_position)) 
					print_rel32();
					break;    
		case 0xE9:  prxntf("jmp ");  ref = print_rel32();       
		            class =  3;     
					lastAnchor=cur_position+i_col-1;
					*(unsigned char *)((int)lpMap+a_loc_save+delta+i_col-1) |= 0x80;
					//leaveFlag=cur_position+i_col;
					break;    		
		default:    fatalError=111;return -1;
	}
	return 0;

}

int print5case()
{
    if (i_opcode==0x9A)
	{
	    prxntf("call far %04X:%08X", i_word,i_dword);
		{class=15; ref=i_dword;}
	}
	else
	{
	    prxntf("jmp far %04X:%08X", i_word,i_dword); 
		{class=7; ref=i_dword;}
	}
	return 0;
}

int print6case()  

⌨️ 快捷键说明

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