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

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

?? disasm.cpp

?? 自己寫的一個調試器模型的源碼, 有單步功能和反匯編引擎.
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
            SwapWord((BYTE*)(Opcode+i+1),&wOp,&wMem);
            if(wMem>=0xA000)
              wsprintf(menemonic,"%s %05X",code,wMem);
            else
                wsprintf(menemonic,"%s %04X",code,wMem);
			
			lstrcat(Disasm->Assembly,menemonic);
			wsprintf(menemonic,"%02X %04X",Op,wOp);
			lstrcat(Disasm->Opcode,menemonic);
			Disasm->OpcodeSize=3;
			Disasm->PrefixSize=PrefixesSize;
			if(LockPrefix==1)
				lstrcat(Disasm->Remarks,"<Illegal Lock Prefix>");
			
			(*Index)+=2;
		}
		break;

		case 0xC3: // RET
        {
            lstrcat(Disasm->Assembly,"ret");
            lstrcat(Disasm->Opcode,"C3");
			Disasm->PrefixSize=PrefixesSize;
			lstrcat(Disasm->Remarks,"Pop IP");
        }
        break;

		case 0xC8: // ENTER XXXX, XX
		{
            SwapWord((BYTE*)(Opcode+i+1),&wOp,&wMem);
			wsprintf(menemonic,"enter %04X, %02X",wMem,(BYTE)Opcode[i+3]);
			lstrcat(Disasm->Assembly,menemonic);
			wsprintf(menemonic,"C8 %04X %02X",wOp,(BYTE)Opcode[i+3]);
			lstrcat(Disasm->Opcode,menemonic);
			Disasm->OpcodeSize=4;
			Disasm->PrefixSize=PrefixesSize;
			(*Index)+=3;
        }
		break;

		case 0xC9: // LEAVE
        {
            lstrcat(Disasm->Assembly,"leave");
            lstrcat(Disasm->Opcode,"C9");
			Disasm->PrefixSize=PrefixesSize;
        }
        break;

		case 0xCB: // RETF
        {
            lstrcat(Disasm->Assembly,"retf");
            lstrcat(Disasm->Opcode,"CB");
			Disasm->PrefixSize=PrefixesSize;
        }
        break;

		case 0xCC: // INT 3
        {
            lstrcat(Disasm->Assembly,"int3");
            lstrcat(Disasm->Opcode,"CC");
			Disasm->PrefixSize=PrefixesSize;
        }
        break;

		case 0xCD: // INT XX
        {
			wsprintf(menemonic,"int %02X",(BYTE)Opcode[i+1]);
            lstrcat(Disasm->Assembly,menemonic);
            wsprintf(menemonic,"CD %02X",(BYTE)*(Opcode+i+1));
            lstrcat(Disasm->Opcode,menemonic);
            Disasm->OpcodeSize=2;
			Disasm->PrefixSize=PrefixesSize;
            ++(*Index);
        }
        break;

		case 0xCE: // INTO
        {
            lstrcat(Disasm->Assembly,"into");
            lstrcat(Disasm->Opcode,"CE");
			Disasm->PrefixSize=PrefixesSize;
        }
        break;

		case 0xCF: // IRETD/W
        {
			if(!RegPrefix){
				lstrcat(Disasm->Assembly,"iretd");
			}
			else if(RegPrefix==1){
				lstrcat(Disasm->Assembly,"iretw");
			}
            lstrcat(Disasm->Opcode,"CF");
			Disasm->PrefixSize=PrefixesSize;
        }
        break;

		case 0xD4:case 0xD5: // AAM/AAD
        {
			char opcode[5];
			switch(Op)
			{
				case 0xD4:wsprintf(opcode,"aam");break;
				case 0xD5:wsprintf(opcode,"aad");break;
			}
			wsprintf(menemonic,"%s %02X",opcode,(BYTE)Opcode[i+1]);
            lstrcat(Disasm->Assembly,menemonic);
            wsprintf(menemonic,"%02X%02X",Op,(BYTE)*(Opcode+i+1));
            lstrcat(Disasm->Opcode,menemonic);
            Disasm->OpcodeSize=2;
			Disasm->PrefixSize=PrefixesSize;
            ++(*Index);
        }
        break;

		case 0xD6: // SALC
        {
            lstrcat(Disasm->Assembly,"salc");
            lstrcat(Disasm->Opcode,"D6");
			Disasm->PrefixSize=PrefixesSize;
        }
        break;

		case 0xD7: // XLAT
		{
			lstrcat(Disasm->Assembly,"xlat");
			lstrcat(Disasm->Opcode, "D7");
			wsprintf(menemonic,"Byte ptr %s:[%s+al]",Segs[SEG],Regs[ADDRM][3]);
			lstrcat(Disasm->Remarks,menemonic);
			Disasm->PrefixSize=PrefixesSize;
		}
		break;

		// 0xE4 is at 'in al, xxx' cases
		case 0xE5: // IN EAX/AX, XX
        {
			// special case Opcode, insted of reading DWORD (4 bytes), we read 1 BYTE.
			char mene[10]="";
			GetInstruction(Op,mene); // get instruction from opcode

			if(RegPrefix==0) // no prefix
			{   
				// read 4 bytes into EAX
				wsprintf(menemonic,"%s %s, %02X",mene,Regs[REG32][0],(BYTE)Opcode[i+1]);
				lstrcat(Disasm->Assembly,menemonic);
			}
			else if(RegPrefix==1) // prefix is being used
			{   
				// read 2 bytes into AX
				wsprintf(menemonic,"%s %s, %02X",mene,Regs[REG16][0],(BYTE)Opcode[i+1]);
				lstrcat(Disasm->Assembly,menemonic);
			}
			wsprintf(menemonic,"%02X%02X",Op,(BYTE)Opcode[i+1]);
			lstrcat(Disasm->Opcode,menemonic);
			Disasm->OpcodeSize=2;
			Disasm->PrefixSize=PrefixesSize;
			lstrcat(Disasm->Remarks,"I/O Instruction");
			++(*Index);
        }
        break;

		case 0xE6: // OUT XX, AL
        {
			char mene[10]="";
			GetInstruction(Op,mene);
            wsprintf(menemonic,"%s %02X, al",mene,(BYTE)Opcode[i+1]);
            lstrcat(Disasm->Assembly,menemonic);
            strcpy(Disasm->Remarks,"");
            wsprintf(menemonic,"%02X%02X",Op,(BYTE)*(Opcode+i+1));
            lstrcat(Disasm->Opcode,menemonic);
            Disasm->OpcodeSize=2;
			Disasm->PrefixSize=PrefixesSize;
			lstrcat(Disasm->Remarks,"I/O Instruction");
            ++(*Index);
        }
        break;

		case 0xE7: // OUT XX, AX/EAX
        {
			// special case Opcode, insted of reading DWORD (4 bytes), we read 1 BYTE.
			char mene[10]="";
			GetInstruction(Op,mene); // get instruction from opcode

			if(RegPrefix==0) // no prefix
			{   
				// read 1 byte into EAX
				wsprintf(menemonic,"%s %02X, %s",mene,(BYTE)Opcode[i+1],Regs[REG32][0]);
				lstrcat(Disasm->Assembly,menemonic);
			}
			else if(RegPrefix==1) // prefix is being used
			{   
				// read 1 byte into AX
				wsprintf(menemonic,"%s %02X, %s",mene,(BYTE)Opcode[i+1],Regs[REG16][0]);
				lstrcat(Disasm->Assembly,menemonic);
			}
			wsprintf(menemonic,"%02X%02X",Op,(BYTE)Opcode[i+1]);
			lstrcat(Disasm->Opcode,menemonic);
			Disasm->OpcodeSize=2;
			Disasm->PrefixSize=PrefixesSize;
			lstrcat(Disasm->Remarks,"I/O Instruction");
			++(*Index);
        }
        break;

		case 0xE8:case 0xE9: // CALL/JMP XXXX/XXXXXXXX
		{
			DWORD CallAddress=0;
			DWORD CallSize=0;
			char temp[10];

			switch(Op)
			{
				case 0xE8:strcpy(temp,"call");break;
				case 0xE9:strcpy(temp,"jmp");break;
			}

			if(!RegPrefix)
			{
                SwapDword((BYTE*)(Opcode+i+1),&dwOp,&dwMem);				
				dwMem+= Disasm->Address + CallSize + 5 + (PrefixesSize-RegPrefix);
				wsprintf(menemonic,"%s %08X",temp,dwMem);
				lstrcat(Disasm->Assembly,menemonic);
				wsprintf(menemonic,"%02X %08X",Op,dwOp);
				lstrcat(Disasm->Opcode,menemonic);
				Disasm->OpcodeSize=5;
				Disasm->PrefixSize = PrefixesSize;                
				(*Index)+=4;
			}
			else 
			{
                SwapWord((BYTE*)(Opcode+i+1),&wOp,&wMem);                
				if(wMem>=0x0000F000)
					CallAddress = (wMem + 4 + (PrefixesSize-RegPrefix))-0x0000F000;
				else
					CallAddress = (Disasm->Address-0x00400000) + wMem + 4 + (PrefixesSize-RegPrefix);
				wsprintf(menemonic,"%s %08X",temp, CallAddress);
				lstrcat(Disasm->Assembly,menemonic);
				wsprintf(menemonic,"%02X %04X",Op,wOp);
				lstrcat(Disasm->Opcode,menemonic);
				Disasm->OpcodeSize=3;
				Disasm->PrefixSize = PrefixesSize;
				(*Index)+=2;
			}
		}
		break;

		case 0xEC: // IN AL, DX
        {
            lstrcat(Disasm->Assembly,"in al, dx");
            lstrcat(Disasm->Opcode,"EC");
			Disasm->PrefixSize=PrefixesSize;
			lstrcat(Disasm->Remarks,"I/O Instruction");
        }
        break;

		case 0xED: // IN AX/EAX, DX
        {
			wsprintf(menemonic,"in %s, dx",Regs[RM][0]);
			lstrcat(Disasm->Assembly,menemonic);
            lstrcat(Disasm->Opcode,"ED");
			Disasm->PrefixSize=PrefixesSize;
			lstrcat(Disasm->Remarks,"I/O Instruction");
        }
        break;

		case 0xEE: // OUT DX, AL
        {
            lstrcat(Disasm->Assembly,"out dx, al");
            lstrcat(Disasm->Opcode,"EE");
			Disasm->PrefixSize=PrefixesSize;
			lstrcat(Disasm->Remarks,"I/O Instruction");
        }
        break;

		case 0xEF: // OUT DX, AX/EAX
        {
			wsprintf(menemonic,"out dx, %s",Regs[RM][0]);
			lstrcat(Disasm->Assembly,menemonic);
            lstrcat(Disasm->Opcode,"EF");
			Disasm->PrefixSize=PrefixesSize;
			lstrcat(Disasm->Remarks,"I/O Instruction");
        }
        break;

		case 0xF1: // ICEBP (INT1)
        {
			lstrcat(Disasm->Assembly,"int1");
            lstrcat(Disasm->Opcode,"F1");
			Disasm->PrefixSize=PrefixesSize;
			lstrcat(Disasm->Remarks,"(icebp)");
        }
        break;

		case 0xF4: // HLT (HALT)
        {
			lstrcat(Disasm->Assembly,"hlt");
            lstrcat(Disasm->Opcode,"F4");
			Disasm->PrefixSize=PrefixesSize;
			lstrcat(Disasm->Remarks,"Halts CPU until RESET");
        }
        break;

		case 0xF5: // CMC
        {
			lstrcat(Disasm->Assembly,"cmc");
            lstrcat(Disasm->Opcode,"F4");
			Disasm->PrefixSize=PrefixesSize;
			lstrcat(Disasm->Remarks,"inverts the Carry Flag");
        }
        break;

		case 0xF8: // CLC
        {
			lstrcat(Disasm->Assembly,"clc");
            lstrcat(Disasm->Opcode,"F8");
			Disasm->PrefixSize=PrefixesSize;
			lstrcat(Disasm->Remarks,"Clears the Carry Flag");
        }
        break;

		case 0xF9: // STC
        {
			lstrcat(Disasm->Assembly,"stc");
            lstrcat(Disasm->Opcode,"F9");
			Disasm->PrefixSize=PrefixesSize;
			lstrcat(Disasm->Remarks,"Sets the Carry Flag to 1");
        }
        break;

		case 0xFA: // CLI
        {
			lstrcat(Disasm->Assembly,"cli");
            lstrcat(Disasm->Opcode,"FA");
			Disasm->PrefixSize=PrefixesSize;
			lstrcat(Disasm->Remarks,"Set Interrupt flag to 0");
        }
        break;

		case 0xFB: // STI
        {
			lstrcat(Disasm->Assembly,"sti");
            lstrcat(Disasm->Opcode,"FB");
			Disasm->PrefixSize=PrefixesSize;
			lstrcat(Disasm->Remarks,"Set Interrupt flag to 1");
        }
        break;

		case 0xFC: // CLD
        {
			lstrcat(Disasm->Assembly,"cld");
            lstrcat(Disasm->Opcode,"FC");
			Disasm->PrefixSize=PrefixesSize;
			lstrcat(Disasm->Remarks,"Set Direction Flag to 0");
        }
        break;

		case 0xFD: // STD
        {
			lstrcat(Disasm->Assembly,"std");
            lstrcat(Disasm->Opcode,"FD");
			Disasm->PrefixSize=PrefixesSize;
			lstrcat(Disasm->Remarks,"Set Direction Flag to 1");
        }
        break;
    }
}

void ShowDecoded(DISASSEMBLY Disasm)
{
	// Printed all information regarding a 
	// Decoded instruction

    char space[]="      ";
    printf("%08X: %s %s %s /%d ; %s\n",Disasm.Address,
			                           Disasm.Opcode,
									   space,
									   Disasm.Assembly,
									   Disasm.OpcodeSize+Disasm.PrefixSize,
									   Disasm.Remarks
          );
}

void FlushDecoded(DISASSEMBLY *Disasm)
{
	// Clear all information of an decoded 
	// Instruction

    strcpy(Disasm->Assembly,""); // Clear menemonic
    strcpy(Disasm->Remarks,"");  // Clear commets
    strcpy(Disasm->Opcode,"");   // Clear opcodes linear
    Disasm->OpcodeSize=1;        // Smallest opcode size
	Disasm->PrefixSize=0;        // No Prefixes
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美一二三区| 99综合电影在线视频| 97久久精品人人做人人爽50路 | 在线不卡一区二区| 国产欧美视频一区二区三区| 亚洲一级二级三级在线免费观看| 国产成人精品影院| 精品免费一区二区三区| 亚洲第一电影网| 色婷婷精品大视频在线蜜桃视频| 久久夜色精品一区| 久久精品国产精品亚洲综合| 欧美日韩一区三区| 亚洲人成精品久久久久| 丁香激情综合国产| 久久久久久久久久美女| 久久精品国产色蜜蜜麻豆| 欧美日韩www| 亚洲国产精品自拍| 在线观看中文字幕不卡| 亚洲欧洲精品天堂一级| 丁香婷婷综合五月| 国产欧美一区二区精品仙草咪 | 精品精品国产高清a毛片牛牛 | 综合激情成人伊人| 成人综合在线视频| 亚洲国产精品传媒在线观看| 高清不卡一区二区| ●精品国产综合乱码久久久久| 国产传媒久久文化传媒| 国产精品女同一区二区三区| 国产福利一区二区三区| 国产片一区二区三区| 福利视频网站一区二区三区| 中文字幕精品一区二区三区精品| 国产99久久久精品| 亚洲欧美在线aaa| 在线一区二区三区| 日韩精品高清不卡| 精品国产一区二区三区忘忧草| 国产一区二区毛片| 国产精品麻豆久久久| 97久久人人超碰| 亚洲一区二区欧美日韩| 欧美丰满少妇xxxbbb| 精品一区二区三区免费观看 | 欧美日韩国产美| 日日夜夜精品视频免费| 久久品道一品道久久精品| 色综合久久99| 一区二区高清免费观看影视大全| 欧美色综合天天久久综合精品| 亚洲午夜精品久久久久久久久| 欧美精品亚洲一区二区在线播放| 经典一区二区三区| 国产精品久久免费看| 色爱区综合激月婷婷| 蜜臀av性久久久久蜜臀aⅴ流畅 | 精品一区二区在线免费观看| 久久精品欧美日韩| 91福利社在线观看| 国产一区二区在线观看免费| 亚洲丝袜精品丝袜在线| 欧美一区2区视频在线观看| 成人一道本在线| 日韩福利电影在线| 中文字幕色av一区二区三区| 宅男噜噜噜66一区二区66| 国产成人亚洲综合a∨婷婷| 亚洲欧美日韩国产成人精品影院| 51精品久久久久久久蜜臀| 大白屁股一区二区视频| 天堂va蜜桃一区二区三区| 精品国产乱码久久久久久免费| 色综合色狠狠天天综合色| 精品一区二区影视| 图片区小说区国产精品视频| 亚洲国产精品精华液ab| 欧美一区二区三区白人| 91在线一区二区三区| 国内外成人在线| 亚洲国产精品嫩草影院| 国产精品无圣光一区二区| 制服丝袜日韩国产| 日本久久电影网| 成人美女视频在线观看18| 免费成人av在线播放| 一个色在线综合| 中文字幕在线播放不卡一区| www激情久久| 日韩一区二区三区精品视频| 91免费精品国自产拍在线不卡| 韩国精品主播一区二区在线观看 | 久久久一区二区| 日韩一区二区三区视频在线| 日韩三级精品电影久久久 | 高清成人免费视频| 国产在线观看免费一区| 欧美aaaaaa午夜精品| 日韩精品亚洲专区| 亚洲高清视频在线| 亚洲国产欧美在线人成| 亚洲女厕所小便bbb| 亚洲欧洲99久久| 国产精品美女久久久久高潮| 国产人妖乱国产精品人妖| 久久亚洲春色中文字幕久久久| 欧美一区二区久久| 欧美日韩一区二区在线观看| 欧美优质美女网站| 91麻豆国产福利精品| 97精品久久久午夜一区二区三区| 成人午夜激情片| 成人高清视频在线观看| 成人亚洲一区二区一| 成人午夜伦理影院| 99精品国产91久久久久久| 99re热视频精品| 91福利视频网站| 欧美日韩精品欧美日韩精品 | 亚洲精品高清视频在线观看| 亚洲日本电影在线| 亚洲精品乱码久久久久久| 一区二区三区四区激情| 亚洲aaa精品| 久久精品国产精品青草| 国内外精品视频| 成人18视频在线播放| 一本一道久久a久久精品综合蜜臀| 91免费小视频| 欧美日韩国产免费| 日韩美女主播在线视频一区二区三区 | 国产成人av一区二区三区在线观看| 国产成人综合精品三级| 成人av一区二区三区| 欧洲人成人精品| 欧美不卡一区二区三区四区| 国产午夜精品一区二区三区四区| 国产精品私房写真福利视频| 又紧又大又爽精品一区二区| 麻豆久久久久久| 99免费精品在线观看| 欧美精品久久天天躁| 久久久久国产精品厨房| 一区二区久久久久| 国产一区二区调教| 在线观看区一区二| 久久精品视频在线看| 一区二区免费在线播放| 久久精品国产一区二区三区免费看| 福利电影一区二区三区| 欧美日韩国产天堂| 亚洲国产成人私人影院tom| 亚洲成精国产精品女| 成人国产精品免费网站| 91精品免费观看| 亚洲欧美在线aaa| 韩国女主播一区二区三区| 日本久久一区二区| 国产亚洲女人久久久久毛片| 亚洲大片一区二区三区| 粉嫩蜜臀av国产精品网站| 欧美日韩在线亚洲一区蜜芽| 国产午夜亚洲精品不卡| 丝袜美腿亚洲一区二区图片| 99国产精品久久久| 26uuu精品一区二区| 蜜桃精品视频在线观看| 色综合天天综合在线视频| 精品欧美乱码久久久久久1区2区| 亚洲精品videosex极品| 成人午夜激情影院| 久久综合九色综合97婷婷女人| 调教+趴+乳夹+国产+精品| 色天使久久综合网天天| 国产日韩成人精品| 国内成人免费视频| 欧美大白屁股肥臀xxxxxx| 日韩和欧美一区二区三区| 欧美亚洲动漫精品| 亚洲欧美偷拍三级| 不卡一区在线观看| 国产欧美日韩另类视频免费观看 | 欧美日韩精品欧美日韩精品 | 日本一区二区三区免费乱视频| 视频一区二区欧美| 欧美午夜精品免费| 亚洲欧美另类小说| 色综合久久六月婷婷中文字幕| 国产欧美精品一区二区三区四区| 激情综合色综合久久综合| 欧美成人福利视频| 青青草国产精品亚洲专区无| 欧美男生操女生| 日本不卡一区二区三区| 日韩欧美在线123| 日本免费在线视频不卡一不卡二| 欧美吻胸吃奶大尺度电影| 亚洲成a人片综合在线| 51精品视频一区二区三区|