亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dsasm_functions.cpp

?? C語言編寫的反匯編工具
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
	case 0xFF: { 
		Bit_d=0; Bit_w=0; 
		if(REG==3 || REG==5) // FAR JMP/CALL
			strcpy(RSize,regSize[4]); // FWORD
		else
			strcpy(RSize,regSize[1]);
			   }
		break; // DWORD
		
    }
	
	// check for bit register size : 16bit/32bit
	if(Bit_w==1)
	{
		RM=REG32; // 32bit registers set       
		
		//if(/*!bound/&& Op==0x62*/)// Special Case
		strcpy(RSize,regSize[1]); // dword ptr   
		
	}
	
	// check for prefix 0x66 OverRide (change default size)
	if(PrefixReg==1)
	{
        if(!UsesFPU) // FPU DataSize doesn't Change, others are, on prefix 0x66.
        { 
			if(lstrcmp(RSize,"Byte")!=0) // doesn't affect byte mode
			{
				RM=REG16; // 16bit registers
				strcpy(RSize,regSize[2]); // word ptr
				if(Op==0x62 || Op==0xC4 || Op==0xC5) // Special Case, 66 Prefix doesn't affect Memory Size.
					strcpy(RSize,regSize[1]);
			}
        }
	}
	
    // SCALE INDEX BASE :
	SIB=(BYTE)(*(*Opcode+pos+1))&0x07; // Get SIB extension
									   /*
									   Exmaple:
									   --------
									   
										 format of sib is:
										 ss iii bbb.
										 where ss is 2 upper bits for scale
										 and they represent power (exponent) of 2 for
										 scale index multipyer.
										 iii is 3 middle bits for index.
										 bbb is 3 low bits for base.
										 
										   *SIB == 4
										   *NO SIB != 4
										   
											 0x04 -> 00 000 [100] <- SIB
											 0x0C -> 00 001 [100] <- SIB
											 0x64 -> 01 100 [100] <- SIB
											 0x60 -> 01 100 [000] <- NO SIB
											 0xB5 -> 10 110 [101] <- NO SIB
											 0x76 -> 01 110 [110] <- NO SIB
											 
											   Extract SS II BB information (3rd byte)
											   =======================================
											   0x81,0xAC,0x20
											   
												 0x20 =  00 100 000
												 
												   Scale: 00 = *1 (not shown)
												   100 - ESP = not Shown, Cannot be an Index register
												   000 - EAX = shown
												   
													 if MOD 10/01 is being used, get displacement data after 
													 the SIB.
	*/
	
	
    // ===================================================//
    //             AddrPrefix is being used!               //
    // ===================================================//
	
	if(PrefixAddr==1) // Prefix 0x67 is set, Change Segments/Addressing Modes to 16 bits
	{		
        FOpcode=((BYTE)(*(*Opcode+pos+1))&0x0F); // Get addressing Mode (8 types of mode)
		reg1=((BYTE)(*(*Opcode+pos+1))&0x38)>>3;
		
        // Check if we decode POP instruction, which had few valid instruction.
        if(Op==0x8F && reg1!=0)
            lstrcat((*Disasm)->Remarks,"Invalid Instruction");
        
        // Choose Mode + Segment
		switch(FOpcode)
		{
		case 0x00: case 0x08: wsprintf(Addr,"%s",addr16[0]); /*SEG=SEG_DS;*/ break; // Mode 0:[BX+SI]
		case 0x01: case 0x09: wsprintf(Addr,"%s",addr16[1]); /*SEG=SEG_DS;*/ break; // Mode 1:[BX+DI]
		case 0x02: case 0x0A: wsprintf(Addr,"%s",addr16[2]); SEG=SEG_SS; break; // Mode 2:[BP+SI]
		case 0x03: case 0x0B: wsprintf(Addr,"%s",addr16[3]); SEG=SEG_SS; break; // Mode 3:[BP+DI]
		case 0x04: case 0x0C: wsprintf(Addr,"%s",addr16[4]); /*SEG=SEG_DS;*/ break; // Mode 4:[SI]
		case 0x05: case 0x0D: wsprintf(Addr,"%s",addr16[5]); /*SEG=SEG_DS;*/ break; // Mode 5:[DI]
		case 0x06: case 0x0E: // Mode 6: [BP+XX/XXXX] | [XX]
			{
				if(Extension==0) // 0x00-0x3F only! has special [XXXX]
				{
					/*SEG=SEG_DS;*/
					SwapWord((BYTE*)(*Opcode+pos+2),&wOp,&wMem);
					wsprintf(Addr,"%04X",wMem);
					(*(*index))+=2; // read 2 bytes
				}
				else{ // 0x50-0xBF has [BP+]
					
					SEG=SEG_SS; // SS Segment
					wsprintf(Addr,"%s",addr16[7]);
				}
			}
			break;
			
		case 0x07: case 0x0F: wsprintf(Addr,"%s",addr16[6]); /*SEG=SEG_DS;*/ break; // Mode 7: [BX]
		}
		
		// Choose used extension 
		// And Decode properly the menemonic
		switch(Extension)
		{
		case 0: // No extension of bytes to RegMem (except mode 6)
			{
				wsprintf(tempMeme,"%s ptr %s:[%s]",RSize,segs[SEG],Addr);
				SwapDword((BYTE*)(*Opcode+pos),&dwOp,&dwMem);
				SwapWord((BYTE*)(*Opcode+pos),&wOp,&wMem);
				
                if(((wOp&0x00FF)&0x0F)==0x06) // 0x00-0x3F with mode 6 only!
				{	                    
					wsprintf(menemonic,"%08X",dwOp);
					(*Disasm)->OpcodeSize=4;
					lstrcat((*Disasm)->Opcode,menemonic);
				}
				else{ // other modes                    
					wsprintf(menemonic,"%04X",wOp);
					(*Disasm)->OpcodeSize=2;
					lstrcat((*Disasm)->Opcode,menemonic);
				}
			}
			break;
			
		case 1: // 1 Byte Extension to regMem
			{
                SwapWord((BYTE*)(*Opcode+pos+1),&wOp,&wMem);
				FOpcode=wOp&0x00FF;
				
				if(FOpcode>0x7F) // check for signed numbers
				{
					wsprintf(Aritmathic,"%s",Scale[0]); // '-' Signed Numbers
					FOpcode = 0x100-FOpcode; // -XX
				}
				wsprintf(menemonic,"%02X%04X",Op,wOp);
				lstrcat((*Disasm)->Opcode,menemonic);
				wsprintf(tempMeme,"%s ptr %s:[%s%s%02X]",RSize,segs[SEG],Addr,Aritmathic,FOpcode);
				++(*(*index)); // 1 byte read
				(*Disasm)->OpcodeSize=3;
			}
			break;
			
		case 2: // 2 Bytes Extension to RegMem
			{
                SwapDword((BYTE*)(*Opcode+pos),&dwOp,&dwMem);
                SwapWord((BYTE*)(*Opcode+pos+2),&wOp,&wMem);
				wsprintf(menemonic,"%08X",dwOp);
				(*Disasm)->OpcodeSize=4;
				lstrcat((*Disasm)->Opcode,menemonic);
				wsprintf(tempMeme,"%s ptr %s:[%s%s%04X]",RSize,segs[SEG],Addr,Aritmathic,wMem);
				(*(*index))+=2; // we read 2 bytes
			}
			break;
		}
		
		// Switch Direction Mode.
		// And Build Menemonic from that direction
		switch(Bit_d)
		{
		case 0: // (->)
			{
				// Check for More Menemonics Addons
				switch(Op)// Check for all Cases
				{
				case 0x6B:
                    {
                        // We check Extension because there is a diff
						// Reading position of bytes depend on the extension
						// 1 = read byte, 3rd position
						// 2 = read dword, 6th position
						
						if(Extension==1) // read 1 byte at 3rd position
						{
                            SwapWord((BYTE*)(*Opcode+pos+2),&wOp,&wMem);
							FOpcode=wOp&0x00FF;
							wsprintf(temp,"%02X",FOpcode);
							lstrcat((*Disasm)->Opcode,temp);
						}
						else{ 
                            if(Extension==2) //read byte at 7th position (dword read before)
                            {   
                                SwapWord((BYTE*)(*Opcode+pos+3),&wOp,&wMem);
                                FOpcode=wOp&0x00FF;
                                wsprintf(temp,"%02X",FOpcode);
                                lstrcat((*Disasm)->Opcode,temp);
                            }
                            else
                            { // Extension==0
                                SwapWord((BYTE*)(*Opcode+pos+1),&wOp,&wMem);
                                FOpcode=wOp&0x00FF;
                                wsprintf(temp,"%02X",FOpcode);
                                lstrcat((*Disasm)->Opcode,temp);
                            }
						}
                        
						if(FOpcode>0x7F) // check for signed numbers!!
                        {
                            FOpcode = 0x100-FOpcode; // -XX (Signed)
                            wsprintf(Aritmathic,"%s",Scale[0]); // '-' aritmathic (Signed)                            
                        }
                        else                    
                            strcpy(Aritmathic,"");
						
						strcpy(instruction,"imul");
						wsprintf(temp,"%s %s,%s,%s%02X",instruction,regs[RM][reg2],tempMeme,Aritmathic,FOpcode);
						
						(*(*index))++;
						(*Disasm)->OpcodeSize++;
                    }
                    break;
					
				case 0x81: case 0xC7: case 0x69:
					{
                        // Get Extensions!
                        //================    
                        
                        if(Extension==0)
                        {
                            if(PrefixReg==0)
                            {   
                                SwapDword((BYTE*)(*Opcode+pos+2),&dwOp,&dwMem);
                                wsprintf(temp," %08X",dwOp);                                
                                lstrcat((*Disasm)->Opcode,temp);                                                                
                                wsprintf(temp,"%08X",dwMem);
                            }
                            else
                            {
                                SwapWord((BYTE*)(*Opcode+pos+2),&wOp,&wMem);
                                wsprintf(temp," %04X",wOp);                                
                                lstrcat((*Disasm)->Opcode,temp);
                                wsprintf(temp,"%04X",wMem);
                            }
                        }
                        else if(Extension==1)
                        {
                            if(PrefixReg==0)
                            {   
                                SwapDword((BYTE*)(*Opcode+pos+3),&dwOp,&dwMem);
                                wsprintf(temp," %08X",dwOp);                                
                                lstrcat((*Disasm)->Opcode,temp);                                                                
                                wsprintf(temp,"%08X",dwMem);                                
                            }
                            else
                            {
                                SwapWord((BYTE*)(*Opcode+pos+3),&wOp,&wMem);
                                wsprintf(temp," %04X",wOp);                                
                                lstrcat((*Disasm)->Opcode,temp);
                                wsprintf(temp,"%04X",wMem);                                
                            }
                        }
                        else if(Extension==2)
                        {     
                            if(PrefixReg==0)
                            {                            
                                SwapDword((BYTE*)(*Opcode+pos+4),&dwOp,&dwMem);
                                wsprintf(temp," %08X",dwOp);                                
                                lstrcat((*Disasm)->Opcode,temp);                                                                
                                wsprintf(temp,"%08X",dwMem); 
                            }
                            else
                            {
                                SwapWord((BYTE*)(*Opcode+pos+4),&wOp,&wMem);
                                wsprintf(temp," %04X",wOp);                                
                                lstrcat((*Disasm)->Opcode,temp);
                                wsprintf(temp,"%04X",wMem);                                                                
                            }
                        }
                        
                        if(Op==0xC7)
                        {
						/* 
						Instruction rule: Mem,Imm ->  1100011woo000mmm,imm
						Code Block: 1100011
						w = Reg Size
						oo - Mod
						000 - Must be!
						mmm - Reg/Mem
						imm - Immidiant (麼弳)
                            */
                            
                            if(reg1!=0)
                                lstrcat((*Disasm)->Remarks,"Invalid Instruction");
							
                            wsprintf(instruction,"%s","mov");
                        }
                        else
                        {
                            if (Op==0x69) // IMUL REG,MEM,IIM32
                            {
                                wsprintf(instruction,"imul %s,",regs[RM][reg1]);
                            }
                            else
                                wsprintf(instruction,"%s",Instructions[REG]);
                        }
                        wsprintf(menemonic,"%s %s,%s",instruction,tempMeme,temp);
                        strcpy(temp,menemonic);
                        (*(*index))+=4;
                        (*Disasm)->OpcodeSize+=4;
					}
					break;
					
				case 0x80:case 0x82: case 0x83: case 0xC6:
					{
						// We check Extension because there is a diff
						// Reading position of bytes depend on the extension
						// 1 = read byte, 3rd position
						// 2 = read dword, 6th position
						
						if(Extension==1) // read 1 byte at 3rd position
						{
                            SwapWord((BYTE*)(*Opcode+pos+2),&wOp,&wMem);
                            FOpcode=wOp&0x00FF;
							wsprintf(temp,"%02X",FOpcode);
							lstrcat((*Disasm)->Opcode,temp);
						}
						else{ 
                            if(Extension==2) //read byte at 7th position (dword read before)
                            {                            
                                SwapWord((BYTE*)(*Opcode+pos+4),&wOp,&wMem);
                                FOpcode=wOp&0x00FF;
                                wsprintf(temp,"%02X",FOpcode);
                                lstrcat((*Disasm)->Opcode,temp);
                            }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩专区欧美专区| 欧美性大战久久久久久久蜜臀| 国产精品一卡二卡在线观看| 99这里只有精品| 日韩精品中文字幕一区二区三区| 自拍偷拍国产精品| 国内精品伊人久久久久影院对白| 欧美主播一区二区三区美女| 久久免费视频一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 99视频精品在线| 精品1区2区在线观看| 性久久久久久久久| 在线视频欧美精品| 亚洲丝袜美腿综合| 国产宾馆实践打屁股91| 欧美大胆一级视频| 日韩av电影天堂| 精品视频一区二区三区免费| 国产精品国产三级国产aⅴ中文 | 色欧美乱欧美15图片| 国产精品超碰97尤物18| 国产乱码精品一区二区三区忘忧草| 9191久久久久久久久久久| 亚洲精品综合在线| 91日韩一区二区三区| 国产日韩精品一区二区浪潮av | 精品国产欧美一区二区| 偷拍亚洲欧洲综合| 色诱亚洲精品久久久久久| 中文字幕一区二区不卡| 播五月开心婷婷综合| 中文字幕乱码日本亚洲一区二区| 国产一区视频在线看| 亚洲精品在线电影| 国产在线一区观看| 久久久久国产成人精品亚洲午夜| 国产一区二区电影| 日本一区二区三区四区在线视频| 国产一区二区日韩精品| 亚洲精品在线电影| 国产成人在线看| 亚洲欧洲日韩综合一区二区| 成人av资源下载| 亚洲免费视频成人| 欧美三区在线观看| 日精品一区二区三区| 欧美刺激脚交jootjob| 国产在线精品一区二区| 久久蜜臀中文字幕| 播五月开心婷婷综合| 亚洲图片一区二区| 欧美一区二区视频在线观看2020| 麻豆精品新av中文字幕| 国产亚洲视频系列| 91猫先生在线| 天天操天天色综合| 久久天堂av综合合色蜜桃网| 成人免费高清在线观看| 一区二区三区欧美| 69av一区二区三区| 国产成人夜色高潮福利影视| 亚洲欧美视频在线观看视频| 欧美色视频在线| 国内一区二区在线| 亚洲精品自拍动漫在线| 日韩精品中文字幕在线一区| bt欧美亚洲午夜电影天堂| 亚洲主播在线观看| 亚洲精品在线三区| 欧美亚洲一区二区在线观看| 毛片不卡一区二区| 亚洲三级久久久| 日韩欧美精品三级| 色噜噜狠狠色综合欧洲selulu| 日本在线不卡一区| 1024成人网色www| 欧美一级欧美一级在线播放| 99久久久久免费精品国产 | 亚洲激情网站免费观看| 日韩精品一区二区三区中文不卡| 99久久国产免费看| 久久精工是国产品牌吗| 亚洲综合久久av| 国产性色一区二区| 666欧美在线视频| 99在线精品免费| 国产乱码精品一品二品| 五月天激情综合| 亚洲精品高清视频在线观看| 国产亚洲短视频| 日韩女优电影在线观看| 欧美专区在线观看一区| 97国产一区二区| 国产成人综合在线观看| 美女高潮久久久| 日韩国产精品久久久| 亚洲一区中文在线| 亚洲欧洲成人自拍| 国产日韩欧美一区二区三区乱码| 欧美一区二区女人| 欧美日韩国产一区| 欧美三区在线观看| 欧美色图12p| 欧美优质美女网站| 色综合天天做天天爱| 粉嫩一区二区三区性色av| 黄色精品一二区| 久久精品国产免费看久久精品| 亚洲成人免费av| 亚洲一区二区三区三| 一区二区三区四区不卡视频| 中文字幕一区二区三区在线播放| 中文字幕第一区综合| 中国色在线观看另类| 欧美激情综合五月色丁香小说| 久久久久亚洲蜜桃| 久久久一区二区三区| 国产日韩一级二级三级| 国产日产精品一区| 亚洲国产精品成人综合| 国产精品网站一区| 亚洲欧美中日韩| 亚洲美女一区二区三区| 亚洲一区中文在线| 日韩福利电影在线观看| 乱中年女人伦av一区二区| 韩国中文字幕2020精品| 国产成人综合网| 色哟哟日韩精品| 欧美美女网站色| 精品国产青草久久久久福利| 国产欧美一区二区三区鸳鸯浴| 日本一区二区免费在线| 国产精品久久久久久久久图文区| 亚洲欧美在线视频观看| 亚洲成人免费视| 国内一区二区视频| 91丨九色丨黑人外教| 欧美体内she精高潮| 日韩欧美国产不卡| 中文字幕第一区第二区| 亚洲精品老司机| 日本不卡123| 成人免费毛片高清视频| 欧美日韩一区国产| 91.麻豆视频| 国产精品久久午夜夜伦鲁鲁| 一区二区在线观看免费| 蜜桃视频在线一区| 成人美女视频在线看| 欧美男人的天堂一二区| 久久婷婷色综合| 亚洲线精品一区二区三区八戒| 久久av资源网| 日本二三区不卡| 精品国精品国产尤物美女| **网站欧美大片在线观看| 免费成人在线观看| 97久久精品人人澡人人爽| 日韩视频中午一区| 尤物在线观看一区| 国产精品69久久久久水密桃| 色综合久久久久网| 欧美成人国产一区二区| 亚洲一区在线观看视频| 国产高清成人在线| 91精品国产色综合久久久蜜香臀| 中文字幕欧美区| 韩国v欧美v日本v亚洲v| 欧美精品日韩精品| 亚洲色图另类专区| 国产jizzjizz一区二区| 8x福利精品第一导航| 亚洲在线观看免费| 大桥未久av一区二区三区中文| 欧美色综合网站| 18成人在线观看| 成人午夜在线免费| 精品免费国产二区三区| 婷婷综合五月天| 欧美日韩午夜影院| 中文字幕一区二区不卡| 大胆欧美人体老妇| 久久九九国产精品| 狠狠色狠狠色综合系列| 91麻豆精品91久久久久久清纯 | 成人午夜伦理影院| 26uuuu精品一区二区| 美国十次了思思久久精品导航| 欧美日韩免费一区二区三区视频| 亚洲人123区| 色综合久久久久久久| 国产精品电影一区二区三区| 国产乱码精品一区二区三区av | 欧美日韩aaaaa| 亚洲成av人片| 欧美日韩精品电影| 日本视频免费一区| 欧美一区二区三区小说|