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

📄 disasm.cpp

📁 一个反汇编程序的代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	
	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 0, 0, NULL, strRM);

	if(iValPrefix)
	{
		wOffset = *(WORD*)(pCodeData+iCodeSize);
		sprintf(strIM, "%04XH", wOffset);
		iCodeSize += 2;
	}
	else
	{
		dwOffset = *(DWORD*)(pCodeData+iCodeSize+iOpcodeOffset);
		sprintf(strIM, "%08XH", dwOffset);
		iCodeSize += 4;
	}
	
	sprintf(szAsmCode, "%s, %s", strRM, strIM);
	
	return iCodeSize;
}

int Func_RM8_IM8(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmCode)
{
	char* pCodeData = pData;
	int iCodeSize = iOpcodeCnt;
	char strRM[64];
	char strIM[16];
	int iOpcodeOffset = iOpcodeCnt -1;
	unsigned char cOffset = 0;

	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 1, 0, NULL, strRM);
	
	cOffset = *(unsigned char*)(pCodeData+iCodeSize);
	sprintf(strIM, "%02XH", cOffset);
	iCodeSize += 1;	

	sprintf(szAsmCode, "%s, %s", strRM, strIM);
	
	return iCodeSize;
}

int Func_RM16_32_IM8(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmCode)
{
	char* pCodeData = pData;
	int iCodeSize = iOpcodeCnt;
	char strRM[64];
	char strIM[16];
	int iOpcodeOffset = iOpcodeCnt -1;
	unsigned char cOffset = 0;

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

	cOffset = *(unsigned char*)(pCodeData+iCodeSize);
	sprintf(strIM, "%02XH", cOffset);
	iCodeSize += 1;
	
	sprintf(szAsmCode, "%s, %s", strRM, strIM);
	
	return iCodeSize;
}

int Func_RM8_R8(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmCode)
{	
	char* pCodeData = pData;
	int iCodeSize = iOpcodeCnt;
	char strR[64];
	char strRM[64];
	unsigned char cDirection = 2;
	int iOpcodeOffset = iOpcodeCnt -1;

	cDirection = (cDirection & (*pCodeData+iOpcodeOffset));
	cDirection = cDirection >> 1;

	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 1, 1, strR, strRM);
	
	if(cDirection == 1)
		sprintf(szAsmCode, "%s, %s", strR, strRM);
	else
		sprintf(szAsmCode, "%s, %s", strRM, strR);
	
	return iCodeSize;
}

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

	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 0, 1, strR, strRM);
	
	sprintf(szAsmCode, "%s, %s", strR, strRM);
	
	return iCodeSize;
}

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

	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 2, 3, strR, strRM);
	
	sprintf(szAsmCode, "%s, %s", strR, strRM);
	
	return iCodeSize;
}

int Func_RM16_32_R16_32(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmCode)
{
	char* pCodeData = pData;
	int iCodeSize = iOpcodeCnt;
	char strR[64];
	char strRM[64];
	unsigned char cDirection = 2;
	int iOpcodeOffset = iOpcodeCnt -1;

	cDirection = (cDirection & (*pCodeData+iOpcodeOffset));
	cDirection = cDirection >> 1;

	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 0, 0, strR, strRM);
	
	if(cDirection == 1)
		sprintf(szAsmCode, "%s, %s", strR, strRM);
	else
		sprintf(szAsmCode, "%s, %s", strRM, strR);
	
	return iCodeSize;
}

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

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

	sprintf(szAsmCode, "%s, %s", strR, strRM);
	
	return iCodeSize;
}

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

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

	sprintf(szAsmCode, "%s, %s", strR, strRM);
	
	return iCodeSize;
}

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

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

	sprintf(szAsmCode, "%s, %s", strR, strRM);
	
	return iCodeSize;
}

int Func_REL8(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 cOffset = 0;

	iCodeSize += 1;
	cOffset = *(pCodeData+1+iOpcodeOffset);
	sprintf(szAsmCode, "%08X", dwAddr+iCodeSize+cOffset);

	return iCodeSize;
}

int Func_REL16_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;
	short shOffset = 0;
	int iOffset = 0;
	if(iValPrefix)
	{
		iCodeSize += 2;
		shOffset = *(short*)(pCodeData+1+iOpcodeOffset);
		sprintf(szAsmCode, "%08X", dwAddr+iCodeSize+shOffset);
	}
	else
	{
		iCodeSize += 4;
		iOffset = *(int*)(pCodeData+1+iOpcodeOffset);
		sprintf(szAsmCode, "%08X", dwAddr+iCodeSize+iOffset);
	}

	return iCodeSize;
}

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

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

	strcpy(szAsmCode, strRM);
	return iCodeSize;
}

int Func_PTR16_16_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 strRM[64];
	if(iValPrefix)
	{
		sprintf(strRM, "%04XH:%04XH", *(WORD*)(pCodeData+3+iOpcodeOffset), *(WORD*)(pCodeData+1+iOpcodeOffset));
		iCodeSize += 4;
	}
	else
	{
		sprintf(strRM, "%04XH:%08XH", *(WORD*)(pCodeData+5+iOpcodeOffset), *(DWORD*)(pCodeData+1+iOpcodeOffset));
		iCodeSize += 6;
	}

	strcpy(szAsmCode, strRM);
	return iCodeSize;
}

int Func_M16_16_32(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmCode)
{
	char* pCodeData = pData;
	char strRM[64];
	char strRM2[64];
	int iCodeSize = iOpcodeCnt;
	int iOpcodeOffset = iOpcodeCnt -1;
	
	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 0, 0, NULL, strRM);

	strcpy(strRM2, strRM);
	sprintf(strRM, "far %s", strRM2);
	strcpy(szAsmCode, strRM);
	return iCodeSize;
}

int Func_M16AND16_32(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmCode)
{
	char* pCodeData = pData;
	char strRM[64];
	int iCodeSize = iOpcodeCnt;
	int iOpcodeOffset = iOpcodeCnt -1;
	
	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 0, 0, NULL, strRM);

	strcpy(szAsmCode, strRM);
	return iCodeSize;
}

int Func_RM8(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmCode)
{
	char* pCodeData = pData;
	char strRM[64];
	int iCodeSize = iOpcodeCnt;
	int iOpcodeOffset = iOpcodeCnt -1;
	
	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 1, 0, NULL, strRM);

	strcpy(szAsmCode, strRM);
	return iCodeSize;
}

int Func_M16INT_FP(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmCode)
{
	char* pCodeData = pData;
	char strRM[64];
	int iCodeSize = iOpcodeCnt;
	int iOpcodeOffset = iOpcodeCnt -1;
	
	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 2, 0, NULL, strRM);
	
	strcpy(szAsmCode, strRM);
	return iCodeSize;
}

int Func_M32INT_FP(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmCode)
{
	char* pCodeData = pData;
	char strRM[64];
	int iCodeSize = iOpcodeCnt;
	int iOpcodeOffset = iOpcodeCnt -1;
	
	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 3, 0, NULL, strRM);

	strcpy(szAsmCode, strRM);
	return iCodeSize;
}

int Func_M64INT_FP(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmCode)
{
	char* pCodeData = pData;
	char strRM[64];
	int iCodeSize = iOpcodeCnt;
	int iOpcodeOffset = iOpcodeCnt -1;
	
	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 4, 0, NULL, strRM);
	
	strcpy(szAsmCode, strRM);
	return iCodeSize;
}

int Func_R16_32_RM16_32_IM8(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmCode)
{
	char* pCodeData = pData;
	int iCodeSize = iOpcodeCnt;
	char strR[64];
	char strRM[64];
	char strIM[20];
	int iOpcodeOffset = iOpcodeCnt -1;
	unsigned char cOffset = 0;

	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 0, 0, strR, strRM);
	
	cOffset = *(unsigned char*)(pCodeData+iCodeSize);
	sprintf(strIM, "%02XH", cOffset);
	iCodeSize += 1;

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

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

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

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

int Func_RM16_32_R16_32_IM8(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmCode)
{
	char* pCodeData = pData;
	int iCodeSize = iOpcodeCnt;
	char strR[64];
	char strRM[64];
	char strIM[20];
	int iOpcodeOffset = iOpcodeCnt -1;
	unsigned char cOffset = 0;
	
	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 0, 0, strR, strRM);
	
	cOffset = *(unsigned char*)(pCodeData+iCodeSize);
	sprintf(strIM, "%02XH", cOffset);
	iCodeSize += 1;

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

int Func_R16_32_RM16_32_IM16_32(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmCode)
{
	char* pCodeData = pData;
	int iCodeSize = iOpcodeCnt;
	char strR[64];
	char strRM[64];
	char strIM[20];
	int iOpcodeOffset = iOpcodeCnt -1;
	WORD wOffset = 0;
	DWORD dwOffset = 0;

	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 0, 0, strR, strRM);
	
	if(iValPrefix)
	{
		wOffset = *(WORD*)(pCodeData+iCodeSize);
		sprintf(strIM, "%04XH", wOffset);
		iCodeSize += 2;
	}
	else
	{
		dwOffset = *(DWORD*)(pCodeData+iCodeSize);
		sprintf(strIM, "%08XH", dwOffset);
		iCodeSize += 4;
	}
	
	sprintf(szAsmCode, "%s, %s, %s", strR, strRM, strIM);
	return iCodeSize;
}

int Func_RM16_SREG(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmCode)
{
	char* pCodeData = pData;
	int iCodeSize = iOpcodeCnt;
	char strR[64];
	char strRM[64];
	unsigned char cDirection = 2;
	int iOpcodeOffset = iOpcodeCnt -1;

	cDirection = (cDirection & (*pCodeData+iOpcodeOffset));
	cDirection = cDirection >> 1;
	
	iCodeSize = Func_RM(pCodeData, iCodeSize, iOpcodeOffset, iValPrefix, iSegPrefix, 2, 4, strR, strRM);
	
	if(cDirection == 1)
		sprintf(szAsmCode, "%s, %s", strR, strRM);
	else
		sprintf(szAsmCode, "%s, %s", strRM, strR);
	
	return iCodeSize;
}

int Func_AL_MOFFS8(char* const pData, DWORD dwAddr, int iOpcodeCnt, int iValPrefix, int iAddrPrefix, int iSegPrefix, char* szAsmCode)
{
	char* pCodeData = pData;
	int iCodeSize = iOpcodeCnt;

⌨️ 快捷键说明

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