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

📄 disasm.cpp

📁 一个反汇编程序的代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	int iOpcodeOffset = iOpcodeCnt -1;
	unsigned char cCode = *(unsigned char*)pCodeData;
	
	if(cCode == 0xa0)
	{
		if(iSegPrefix > -1)
			sprintf(szAsmCode, "AL, byte ptr %s[%8XH]", Seg[iSegPrefix], *(DWORD*)(pCodeData+1+iOpcodeOffset));
		else
			sprintf(szAsmCode, "AL, byte ptr [%8XH]", *(DWORD*)(pCodeData+1+iOpcodeOffset));
		iCodeSize += 4;
	}
	else if(cCode == 0xa2)
	{
		if(iSegPrefix > -1)
			sprintf(szAsmCode, "byte ptr %s[%8XH], AL", Seg[iSegPrefix], *(DWORD*)(pCodeData+1+iOpcodeOffset));
		else
			sprintf(szAsmCode, "byte ptr [%8XH], AL", *(DWORD*)(pCodeData+1+iOpcodeOffset));
		iCodeSize += 4;
	}
	else
	{
		sprintf(szAsmCode, "ERR");
	}

	return iCodeSize;
}

int Func_AXE_MOFFS16_32(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmCode)
{
	char* pCodeData = pData;
	int iCodeSize = iOpcodeCnt;
	int iOpcodeOffset = iOpcodeCnt -1;
	char strR[20];
	char szOffset[40];
	unsigned char cCode = *(unsigned char*)pCodeData;

	if(iValPrefix)
	{
		strcpy(strR, "AX");
		if(iSegPrefix > -1)
			sprintf(szOffset, "word ptr %s[%08XH]", Seg[iSegPrefix], *(DWORD*)(pCodeData+1+iOpcodeOffset));
		else
			sprintf(szOffset, "word ptr [%08XH]", *(DWORD*)(pCodeData+1+iOpcodeOffset));
	}

	else
	{
		strcpy(strR, "EAX");
		if(iSegPrefix > -1)
			sprintf(szOffset, "dword ptr %s[%08XH]", Seg[iSegPrefix], *(DWORD*)(pCodeData+1+iOpcodeOffset));
		else
			sprintf(szOffset, "dword ptr [%08XH]", *(DWORD*)(pCodeData+1+iOpcodeOffset));
	}

	if(cCode == 0xa1)
	{	
		sprintf(szAsmCode, "%s, %s", strR, szOffset);
		iCodeSize += 4;
	}	
	else if(cCode == 0xa3)
	{
		sprintf(szAsmCode, "%s, %s", szOffset, strR);
		iCodeSize += 4;
	}
	else
	{
		strcpy(szAsmCode, "ERR");
	}
	
	return iCodeSize;
}

int Func_REG_IM8(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmcode)
{
	char* pCodeData = pData;
	int iCodeSize = iOpcodeCnt;
	int iOpcodeOffset = iOpcodeCnt - 1;
	char strR[20];
	char strIM[20];
	unsigned char cMask = 15;
	unsigned char cOffset = 0;

	cMask = cMask & *(pCodeData);
	cMask = cMask & 7;
	sprintf(strR, "%s", R8[cMask]);

	cOffset = *(unsigned char*)(pCodeData+1+iOpcodeOffset);
	sprintf(strIM, "%02XH", cOffset);

	iCodeSize += 1;

	sprintf(szAsmcode, "%s, %s", strR, strIM);
	return iCodeSize;
}

int Func_REG_IM16_32(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmcode)
{
	char* pCodeData = pData;
	int iCodeSize = iOpcodeCnt;
	int iOpcodeOffset = iOpcodeCnt - 1;
	char strR[20];
	char strIM[20];
	unsigned char cMask = 15;
	WORD wOffset = 0;
	DWORD dwOffset = 0;
	
	cMask = cMask & (*(pCodeData));
	cMask = cMask & 7;
	if(iValPrefix)
	{
		sprintf(strR, "%s", R16[cMask]);
		wOffset = *(WORD*)(pCodeData+1+iOpcodeOffset);
		sprintf(strIM, "%04XH", wOffset);
		iCodeSize += 2;
	}
	else
	{
		sprintf(strR, "%s", R32[cMask]);
		dwOffset = *(DWORD*)(pCodeData+1+iOpcodeOffset);
		sprintf(strIM, "%08XH", dwOffset);
		iCodeSize += 4;
	}
	
	sprintf(szAsmcode, "%s, %s", strR, strIM);
	return iCodeSize;
}

int Func_IM16_IM8(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmcode)
{
	char* pCodeData = pData;
	int iCodeSize = iOpcodeCnt;
	int iOpcodeOffset = iOpcodeCnt -1;
	char szIM16[16];
	char szIM8[10];
	WORD wOffset = 0;
	unsigned char cOffset = 0;

	wOffset = *(WORD*)(pCodeData+1+iOpcodeOffset);
	cOffset = *(unsigned char*)(pCodeData+3+iOpcodeOffset);
	sprintf(szIM16, "%04XH", wOffset);
	sprintf(szIM8, "%02XH", cOffset);
	sprintf(szAsmcode, "%s, %s", szIM16, szIM8);
	iCodeSize += 3;
	return iCodeSize;
}

int Func_RM8_1(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmcode)
{
	char* pCodeData = pData;
	int iCodeSize = iOpcodeCnt;
	char strRM[64];
	int iOpcodeOffset = iOpcodeCnt -1;

	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 1, 0, NULL, strRM);

	sprintf(szAsmcode, "%s, 1", strRM);

	return iCodeSize;
}

int Func_RM16_32_1(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmcode)
{
	char* pCodeData = pData;
	int iCodeSize = iOpcodeCnt;
	char strRM[64];
	int iOpcodeOffset = iOpcodeCnt -1;

	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 0, 0, NULL, strRM);

	sprintf(szAsmcode, "%s, 1", strRM);

	return iCodeSize;
}

int Func_RM8_CL(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmcode)
{
	char* pCodeData = pData;
	int iCodeSize = iOpcodeCnt;
	char strRM[64];
	int iOpcodeOffset = iOpcodeCnt -1;

	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 1, 0, NULL, strRM);

	sprintf(szAsmcode, "%s, CL", strRM);

	return iCodeSize;
}

int Func_RM16_32_CL(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmcode)
{
	char* pCodeData = pData;
	int iCodeSize = iOpcodeCnt;
	char strRM[64];
	int iOpcodeOffset = iOpcodeCnt -1;

	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 0, 0, NULL, strRM);

	sprintf(szAsmcode, "%s, CL", strRM);
	
	return iCodeSize;
}

int Func_D4D5(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmcode)
{
	char* pCodeData = pData;
	int iCodeSize = 2;
	unsigned char cFir = *(pCodeData);
	unsigned char cSec = *(pCodeData+1);

	switch(cFir)
	{
	case 0xd4:
		if(cSec == 0x0a)
			strcpy(szAsmcode, "AAM");
		else
			sprintf(szAsmcode, "AAM (base=%d)", cSec);
		break;
	case 0xd5:
		if(cSec == 0x0a)
			strcpy(szAsmcode, "AAD");
		else
			sprintf(szAsmcode, "AAD (base=%d)", cSec);
		break;
	default:
		;
	}
	return iCodeSize;
}

typedef int (*DISFUNC) (char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmCode);

unsigned char CodePrefix[8] =		{0x26,0x2e,0x36,0x3e,0x64,
									0x65,0x66,0x67};

unsigned char ImOneCodeList[93] =	{0x06,0x07,0x0e,0x16,0x17,
								    0x1e,0x1f,0x27,0x2f,0x37,
								    0x3f,0x40,0x41,0x42,0x43,
								    0x44,0x45,0x46,0x47,0x48,
								    0x49,0x4a,0x4b,0x4c,0x4d,
								    0x4e,0x4f,0x50,0x51,0x52,
								    0x53,0x54,0x55,0x56,0x57,
								    0x58,0x59,0x5a,0x5b,0x5c,
								    0x5d,0x5e,0x5f,0x60,0x61,
								    0x6c,0x6d,0x6e,0x6f,0x90,
									0x91,0x92,0x93,0x94,0x95,
									0x96,0x97,
								    0x98,0x99,0x9c,0x9d,0x9e,
									0x9f,0xa4,0xa5,0xa6,0xa7,
									0xaa,0xab,0xac,0xad,0xae,
									0xaf,0xc3,0xc9,0xcb,0xcc,
									0xce,0xcf,0xd7,0xec,0xed,
									0xee,0xef,0xf0,0xf4,0xf5,
									0xf8,0xf9,0xfa,0xfb,0xfc,
									0xfd};

char szImOneCodeList[93][20] = {"PUSH ES", "POP ES", "PUSH CS", "PUSH SS", "POP SS",
								"PUSH DS", "POP DS", "DAA", "DAS", "AAA",
								"AAS", "INC EAX", "INC ECX", "INC EDX", "INC EBX",
								"INC ESP", "INC EBP", "INC ESI", "INC EDI", "DEC EAX",
								"DEC ECX", "DEC EDX", "DEC EBX", "DEC ESP", "DEC EBP",
								"DEC ESI", "DEC EDI", "PUSH EAX", "PUSH ECX", "PUSH EDX",
								"PUSH EBX", "PUSH ESP", "PUSH EBP", "PUSH ESI", "PUSH EDI",
								"POP EAX", "POP ECX", "POP EDX", "POP EBX", "POP ESP",
								"POP EBP", "POP ESI", "POP EDI", "PUSHAD", "POPAD",
								"INSB", "INSD", "OUTSB", "OUTSD","NOP",
								"XCHG EAX, ECX", "XCHG EAX, EDX", "XCHG EAX, EBX", "XCHG EAX, ESP", "XCHG EAX, EBP",
								"XCHG EAX, ESI", "XCHG EAX, EDI",
								"CWDE", "CDQ", "PUSHFD", "POPFD", "SAHF",
								"LAHF", "MOVSB", "MOVSD", "CMPSB", "CMPSD",
								"STOSB", "STOSD", "LODSB", "LODSD",	"SCASB",
								"SCASD", "RET", "LEAVE", "RET",	"INT 3",
								"INTO", "IRETD", "XLATB", "IN AL, DX", "IN EAX,EDX",
								"OUT DX, AL", "OUT DX, EAX", "LOCK", "HLT", "CMC",
								"CLC", "STC", "CLI", "STI",	"CLD",
								"STD"};

unsigned char SimpleCodeList[125] = {0x00,0x01,0x02,0x03,0x04,
									0x05,0x08,0x09,0x0a,0x0b,
									0x0c,0x0d,0x10,0x11,0x12,
									0x13,0x14,0x15,0x18,0x19,
									0x1a,0x1b,0x1c,0x1d,0x20,
									0x21,0x22,0x23,0x24,0x25,
									0x28,0x29,0x2a,0x2b,0x2c,
									0x2d,0x30,0x31,0x32,0x33,
									0x34,0x35,0x38,0x39,0x3a,
									0x3b,0x3c,0x3d,0x62,0x63,
									0x68,0x69,0x6a,0x6b,0x70,
									0x71,0x72,0x73,0x74,0x75,
									0x76,0x77,0x78,0x79,0x7a,
									0x7b,0x7c,0x7d,0x7e,0x7f,
									0x84,0x85,0x86,0x87,0x88,
									0x89,0x8a,0x8b,0x8c,0x8d,
									0x8e,0x8f,0x9a,0xa0,0xa1,
									0xa2,0xa3,0xa8,0xa9,0xb0,
									0xb1,0xb2,0xb3,0xb4,0xb5,
									0xb6,0xb7,0xb8,0xb9,0xba,
									0xbb,0xbc,0xbd,0xbe,0xbf,
									0xc2,0xc4,0xc5,0xc6,0xc7,0xc8,0xca,
									0xcd,0xe0,0xe1,0xe2,0xe3,
									0xe4,0xe5,0xe6,0xe7,0xe8,
									0xe9,0xea,0xeb};

char szSimpleCode[125][10] = {"ADD", "ADD", "ADD", "ADD", "ADD",
						"ADD", "OR", "OR", "OR", "OR",
						"OR", "OR", "ADC", "ADC", "ADC",
						"ADC", "ADC", "ADC", "SBB", "SBB",
						"SBB", "SBB", "SBB", "SBB", "AND",
						"AND", "AND", "AND", "AND", "AND",
						"SUB", "SUB", "SUB", "SUB", "SUB",
						"SUB", "XOR", "XOR", "XOR", "XOR",
						"XOR", "XOR", "CMP", "CMP", "CMP",
						"CMP", "CMP", "CMP", "BOUND", "ARPL",
						"PUSH", "IMUL", "PUSH", "IMUL", "JO",
						"JNO", "JC", "JAE", "JE", "JNE",
						"JBE", "JA", "JS", "JNS", "JP",
						"JPO", "JL", "JGE", "JLE", "JG",
						"TEST", "TEST", "XCHG", "XCHG", "MOV",
						"MOV", "MOV", "MOV", "MOV", "LEA",
						"MOV", "POP", "CALL", "MOV", "MOV",
						"MOV", "MOV", "TEST", "TEST", "MOV",
						"MOV", "MOV", "MOV", "MOV", "MOV",
						"MOV", "MOV", "MOV", "MOV", "MOV",
						"MOV", "MOV", "MOV", "MOV", "MOV",
						"RET", "LES", "LDS", "MOV", "MOV", "ENTER", "RET",
						"INT", "LOOPNE", "LOOPZ", "LOOP", "JCXZ",
						"IN", "IN", "OUT", "OUT", "CALL",
						"JMP", "JMP", "JMP"};

DISFUNC pSimpleCodeFunc[125] = {Func_RM8_R8, Func_RM16_32_R16_32, Func_RM8_R8, Func_RM16_32_R16_32, Func_AL_IM8,
Func_AXE_IM16_32, Func_RM8_R8, Func_RM16_32_R16_32, Func_RM8_R8, Func_RM16_32_R16_32,
Func_AL_IM8, Func_AXE_IM16_32, Func_RM8_R8, Func_RM16_32_R16_32, Func_RM8_R8,
Func_RM16_32_R16_32, Func_IM8, Func_AXE_IM16_32, Func_RM8_R8, Func_RM16_32_R16_32,
Func_RM8_R8, Func_RM16_32_R16_32, Func_AL_IM8, Func_AXE_IM16_32, Func_RM8_R8,
Func_RM16_32_R16_32, Func_RM8_R8, Func_RM16_32_R16_32, Func_AL_IM8, Func_AXE_IM16_32,
Func_RM8_R8, Func_RM16_32_R16_32, Func_RM8_R8, Func_RM16_32_R16_32, Func_AL_IM8,
Func_AXE_IM16_32, Func_RM8_R8, Func_RM16_32_R16_32, Func_RM8_R8, Func_RM16_32_R16_32,
Func_AL_IM8, Func_AXE_IM16_32, Func_RM8_R8, Func_RM16_32_R16_32, Func_RM8_R8,
Func_RM16_32_R16_32, Func_AL_IM8, Func_AXE_IM16_32, Func_R16_32_M16AND16_32AND32, Func_RM16_32_R16_32,
Func_IM16_32, Func_R16_32_RM16_32_IM16_32, Func_IM8, Func_R16_32_RM16_32_IM8, Func_REL8,
Func_REL8, Func_REL8, Func_REL8, Func_REL8, Func_REL8,
Func_REL8, Func_REL8, Func_REL8, Func_REL8, Func_REL8,
Func_REL8, Func_REL8, Func_REL8, Func_REL8, Func_REL8,
Func_RM8_R8, Func_RM16_32_R16_32, Func_RM8_R8, Func_RM16_32_R16_32, Func_RM8_R8,
Func_RM16_32_R16_32, Func_RM8_R8, Func_RM16_32_R16_32, Func_RM16_SREG, Func_RM16_32_R16_32,
Func_RM16_SREG, Func_RM16_32, Func_PTR16_16_32, Func_AL_MOFFS8, Func_AXE_MOFFS16_32, Func_AL_MOFFS8,
Func_AXE_MOFFS16_32, Func_AL_IM8, Func_AXE_IM16_32, Func_REG_IM8, Func_REG_IM8,
Func_REG_IM8, Func_REG_IM8, Func_REG_IM8, Func_REG_IM8, Func_REG_IM8,
Func_REG_IM8, Func_REG_IM16_32, Func_REG_IM16_32, Func_REG_IM16_32, Func_REG_IM16_32,
Func_REG_IM16_32, Func_REG_IM16_32, Func_REG_IM16_32, Func_REG_IM16_32, Func_IM16_32,
Func_R16_32_M16_16_32, Func_R16_32_M16_16_32, Func_RM8_IM8, Func_RM16_32_IM16_32, Func_IM16_IM8, Func_IM16_32, Func_IM8,
Func_REL8, Func_REL8, Func_REL8, Func_REL8, Func_AL_IM8,
Func_AXE_IM16_32, Func_AL_IM8, Func_AXE_IM16_32, Func_REL16_32, Func_REL16_32,
Func_PTR16_16_32, Func_REL8};

unsigned char ExtOneCodeList[17] = {0x80,0x81,0x83,0xc0,0xc1,
									0xd0,0xd1,0xd2,0xd3,0xd8,
									0xda,0xdc,0xde,0xf6,0xf7,
									0xfe,0xff};

char sz808183Code[8][4] = {"ADD", "OR", "ADC", "SBB", "AND", "SUB", "XOR", "CMP"};
char szC0C1D0D1D2D3[8][4] = {"ROL", "ROR", "RCL", "RCR", "SAL", "SHR", "ERR", "SAR"};
char szF6F7[8][5] = {"TEST", "ERR", "NOT", "NEG", "MUL", "IMUL", "DIV", "IDIV"};
char szD8DADCDE[8][6] = {"FADD", "FMUL", "FCOM", "FCOMP", "FSUB", "FSUBR", "FIDV", "FIDVR"};

unsigned char TwoOpcodeSet[13] =	{0x0f,0xd4,0xd5,0xd8,0xd9,
									0xda,0xdb,0xdc,0xdd,0xde,
									0xdf,0xf2,0xf3};

unsigned char ImSecCode0FList[24]=	{0x06,0x08,0x09,0x0b,0x30,
									0x31,0x32,0x33,0x34,0x35,
									0xa0,0xa1,0xa2,0xa8,0xa9,
									0xaa,0xc8,0xc9,0xca,0xcb,
									0xcc,0xcd,0xce,0xcf};

char szImSecCode0FList[24][20] = {"CLTS", "INVD", "WBINVD", "UD2", "WRMSR",
									"RDTSC", "RDMSR", "RDPMC", "SYSENTER", "SYSEXIT",
									"PUSH FS", "POP FS", "CPUID", "PUSH GS", "POP GS",
									"RSM", "BSWAP EAX", "BSWAP ECX", "BSWAP EDX", "BSWAP EBX",
									"BSWAP ESP", "BSWAP EBP", "BSWAP ESI", "BSWAP EDI"};

unsigned char SimpleSecCode0FList[70]={0x02,0x03,0x40,0x41,0x42,
										0x43,0x44,0x45,0x46,0x47,
										0x48,0x49,0x4a,0x4b,0x4c,
										0x4d,0x4e,0x4f,0x80,0x81,
										0x82,0x83,0x84,0x85,0x86,
										0x87,0x88,0x89,0x8a,0x8b,
										0x8c,0x8d,0x8e,0x8f,0x90,
										0x91,0x92,0x93,0x94,0x95,
										0x96,0x97,0x98,0x99,0x9a,
										0x9b,0x9c,0x9d,0x9e,0x9f,
										0xa3,0xa4,0xa5,0xab,0xac,
										0xad,0xaf,0xb0,0xb1,0xb2,
										0xb3,0xb4,0xb5,0xb6,0xb7,
										0xbb,0xbc,0xbd,0xc0,0xc1};

char szSimpleSecCode0FList[70][10] = {"LAR", "LSL", "CMOVO", "CMOVNO", "CMOVNAE",
									"CMOVNC", "CMOVZ", "CMOVNZ", "CMOVNA", "CMOVNBE",
									"CMOVS", "CMOVNS", "CMOVPE", "CMOVPO", "CMOVNGE",
									"CMOVNL", "CMOVNG", "CMOVNLE", "JO", "JNO",
									"JNAE", "JAE", "JZ", "JNE", "JNA",
									"JA", "JS", "JNS", "JPE", "JPO",
									"JNGE", "JNL", "JNG", "JNLE", "SETO",
									"SETNO", "SETNAE", "SETNC", "SETZ", "SETNE",
									"SETNA", "SETNBE", "SETS", "SETNS", "SETPE",
									"SETPO", "SETNGE", "SETNL", "SETLE", "SETNLE",
									"BT", "SHLD", "SHLD", "BTS", "SHRD",
									"SHRD", "IMUL", "CMPXCHG", "CMPXCHG", "LSS",
									"BTR", "LFS", "LGS", "MOVZX", "MOVZX",
									"BTC", "BSF", "BSR", "XADD", "XADD"};

DISFUNC pSimpleSecCode0F[70] = {Func_RM16_32_R16_32, Func_RM16_32_R16_32, Func_RM16_32_R16_32, Func_RM16_32_R16_32, Func_RM16_32_R16_32,
Func_RM16_32_R16_32, Func_RM16_32_R16_32, Func_RM16_32_R16_32, Func_RM16_32_R16_32, Func_RM16_32_R16_32,
Func_RM16_32_R16_32, Func_RM16_32_R16_32, Func_RM16_32_R16_32, Func_RM16_32_R16_32, Func_RM16_32_R16_32,
Func_RM16_32_R16_32, Func_RM16_32_R16_32, Func_RM16_32_R16_32, Func_REL16_32, Func_REL16_32,
Func_REL16_32, Func_REL16_32, Func_REL16_32, Func_REL16_32, Func_REL16_32,
Func_REL16_32, Func_REL16_32, Func_REL16_32, Func_REL16_32, Func_REL16_32,
Func_REL16_32, Func_REL16_32, Func_REL16_32, Func_REL16_32, Func_RM8,
Func_RM8, Func_RM8, Func_RM8, Func_RM8, Func_RM8,
Func_RM8, Func_RM8, Func_RM8, Func_RM8, Func_RM8,
Func_RM8, Func_RM8, Func_RM8, Func_RM8, Func_RM8,
Func_RM16_32_R16_32, Func_RM16_32_R16_32_IM8, Func_RM16_32_R16_32_CL, Func_RM16_32_R16_32, Func_RM16_32_R16_32_IM8,
Func_RM16_32_R16_32_CL, Func_RM16_32_R16_32, Func_RM8_R8, Func_RM16_32_R16_32, Func_R16_32_M16_16_32,
Func_RM16_32_R16_32, Func_R16_32_M16_16_32, Func_R16_32_M16_16_32, Func_R16_32_RM8, Func_R32_RM16,
Func_RM16_32_R16_32, Func_RM16_32_R16_32, Func_RM16_32_R16_32, Func_RM8_R8, Func_RM16_32_R16_32};


unsigned char ThreeOpcodeSet =		0x9b;

unsigned char ErrCodeSet[3] =		{0x82,0xd6,0xf1}; 

//解析简单的带扩展码的指令
int Func_ExtSimpCode(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmcode)
{
	char* pCodeData = pData;
	int iCodeSize = iOpcodeCnt;
	int iOpcodeOffset = iOpcodeCnt -1;
	unsigned char cModRM = 0, cMod = 0, cR = 0, cRM = 0;
	char szOpcode[20];
	char szCode[64];
	unsigned char cTarget = *(pCodeData);

	cModRM = *(pCodeData+1+iOpcodeOffset);

⌨️ 快捷键说明

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