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

📄 dasmcte.h

📁 win32 exe程序反汇编
💻 H
📖 第 1 页 / 共 3 页
字号:
/*	
 *		fichier DasmCte.h 	: fichier header
 *
 *	descr : classe automate desassembleur
 *	fichier regroupant les constantes lie au language machine du x86 
 *
 *	projet : PEDasm
 *	rq : inclus dans dasmCode.cpp uniquement 
 *
 *	rq2:
 *  
 *	Ce programme est libre de droits. Il peut etre distribue et/ou modifie
 *  selon les termes de la licence 'GNU General Public License version 2'.
 *	
 *	Ce programme est distribue sans aucunes garanties, y compris d'utilite 
 *	ni de risques encouru, quelle que soit son utilisation.
 *
 *	lire le fichier licence.txt fourni ou bien ecrire a :
 *	the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *	pour recevoir une copie de la licence.
 *  	
 *	Copyright (C) 1997 - 1998 Nicolas Witczak <witczak@geocities.com>
 */


////////////////////////////////////////////////////////////////////
// prefixes
	const unsigned int cteLockPrefix	= 0xf0 ;
	const unsigned int cteRepNENZPrefix = 0xf2 ;	
	const unsigned int cteRepPrefix		= 0xf3 ;

	const unsigned int cteCSSRegPrefix = 0x2e ;
	const unsigned int cteSSSRegPrefix = 0x36 ;
	const unsigned int cteDSSRegPrefix = 0x3e ;
	const unsigned int cteESSRegPrefix = 0x26 ;
	const unsigned int cteFSSRegPrefix = 0x64 ;
	const unsigned int cteGSSRegPrefix = 0x65 ;

	const unsigned int cteOpSzOvrPrefix = 0x66 ;
	const unsigned int cteAdrSZOvrPrefix = 0x67 ;

////////////////////////////////////////////////////////////////////
// taille d'operande
const char*		cteOperandQualif[5] = 
{	"" , "byte ptr" , "word ptr" , "dword ptr" ,"qword ptr" } ;

////////////////////////////////////////////////////////////////////
// conditions
const char*		cteConditions[16] = 
{	"o" , "no" , "b" , "nb" , "e" , "ne" , "be" , "a" , 
	"s" , "ns" , "p" , "np" , "l" , "nl" , "le" , "g" } ;

////////////////////////////////////////////////////////////////////
// prefix de repetition
const char*		cteRep[4] =
{ "lock " , "" , "repnz ", "rep "	} ;

const char*		cteRepZ[4] =
{ "lock " , "" , "repnz ", "repz "	} ;

////////////////////////////////////////////////////////////////////
// empacketage mmx
const char*		cteMmxPack[4] = 
{ "b" , "w" , "d" , "q"	} ;

////////////////////////////////////////////////////////////////////
// registres	
// 0 -> instruction non reconnu

/** registres d'usage generaux reg = [ taille ][code reg] */
const char*		cteGenReg[4][8] = 
{
	{ 0, 0 , 0 , 0 , 0 , 0 , 0 , 0 },
	{ "al" , "cl" , "dl" , "bl" , "ah" , "ch" , "dh" , "bh" },
	{ "ax" , "cx" , "dx" , "bx" , "sp" , "bp" , "si" , "di"  },
	{ "eax" , "ecx" , "edx" , "ebx" , "esp" , "ebp" , "esi" , "edi" }
};

/** registres de segment sreg2 et sreg3 */
const char*		cteSegReg[8] = 
{	"es" , "cs" , "ss" , "ds" , "fs" , "gs" , 0 , 0 } ;

/** registres de controle */
const char*		cteCtrlReg[8] = 
{	"cr0" , 0  , "cr2" , "cr3" , "cr4" , 0 , 0 , 0 } ;

/** registres de debug */
const char*		cteDebReg[8] = 
{	"dr0" , "dr1"  , "dr2" , "dr3" , 0 , 0 , "dr6" , "dr7" } ;

/** registres de mmx */
const char*		cteMmxReg[8] = 
{	"mm0" , "mm1"  , "mm2" , "mm3" , "mm4" , "mm5" , "mm6" , "mm7" } ;

/** registres fpu */
const char*		cteFpuReg[8] = 
{	"st(0)" , "st(1)"  , "st(2)" , "st(3)" , "st(4)" , "st(5)" , "st(6)" , "st(7)" } ;


////////////////////////////////////////////////////////////////////
// definition des actions ss forme de masque
// 
// format du mask :
//		modxxxrm		-> mod rm
//		registre gen	-> grg , g08 , g16 , g32
//		empacketage mmx -> pp 
//		registre mmx	-> xmm
//		registre seg	-> 2sg 3sg
//		registre control / debug	-> _cr / _dr
//		registre fpu	-> fpu
//		registre eax,ax,al	-> eax
//		flags : s , w, d
//		conditions tttn
//		valeurs :	immediat	-> i08 , is8 , i16 , i32 , i00(taille par defaut) 
//					call   c00 (tjs 32b) 
//					jump   j08 , j16(inutilise) , j32
//					adressage direct mem a32 
//		sep octet		-> : absent apres rm ou donees
//		oos / oas		-> : override operand size  ,override adresse size doit etre present
//		nos / nas		-> : override operand size  ,override adresse size ne doit pas etre present
//		fin reconnaissance -> \0


	////////////////////////////////////////////////////////////////////
	// instructions effectivement utilise
	// initialise ds InitBanks() , jamais detruit
static SOPContext*	pfnOPCodeMask ;

	////////////////////////////////////////////////////////////////////
	// instructions d'usage general
static SOPContext	pfnOPCGeneral[] = 
{ 
	{ "0011 0111:"						, "aaa" , 0 } , 

	{ "1101 0101 : 0000 1010:"			, "aad" , 0 } , 

	{ "1101 0100 : 0000 1010:"			, "aam" , 0 } , 	

	{ "0011 1111:"						, "aas" , 0 } , 

	{ "0001 00dw : 11 grg grg:"			, "adc %1 , %0" , 0 } , 
	{ "0001 00dw : mod grg rm"			, "adc %p %1 , %0" , 0 } , 
	{ "1000 00sw : 11 010 grg : i00"	, "adc %0 , %1" , 0 } , 
	{ "0001 010w eax : i00"				, "adc %0 , %1" , 0 } , 
	{ "1000 00sw : mod 010 rm i00"		, "adc %p %0 , %1" , 0 } , 

	{ "0000 00dw : 11 grg grg:"			, "add %1 , %0" , 0 } , 
	{ "0000 00dw : mod grg rm"			, "add %p %1 , %0" , 0 } , 
	{ "1000 00sw : 11 000 grg : i00"	, "add %0 , %1" , 0 } , 
	{ "0000 010w eax: i00"				, "add %0 , %1" , 0 } , 
	{ "1000 00sw : mod 000 rm i00"		, "add %p  %0 , %1" , 0 } , 

	{ "0010 00dw : 11 grg grg:"			, "and %1 , %0" , 0 } , 
	{ "0010 00dw : mod grg rm"			, "and %p %1 , %0" , 0 } , 
	{ "1000 00sw : 11 100 grg: i00"		, "and %0 , %1" , 0 } , 
	{ "0010 010w eax: i00"				, "and %0 , %1" , 0 } , 
	{ "1000 00sw : mod 100 rm i00"		, "and %p %0 , %1" , 0 } , 
	
	{ "0110 0010 : mod grg rm"			, "bound %0 , %1" , 0 } , 

	{ "0000 1111 : 1011 1100 : 11 grg grg:" , "bsf %1 , %0" , 0 } , 
	{ "0000 1111 : 1011 1100 : mod grg rm" , "bsf %p %1 , %0" , 0 } , 

	{ "0000 1111 : 1011 1101 : 11 grg grg:" , "bsr %1 , %0" , 0 } , 
	{ "0000 1111 : 1011 1101 : mod grg rm" , "bsr %p %1 , %0" , 0 } , 

	{ "0000 1111 : 1100 1 grg:"			, "bswap %0" , 0 } , 

	{ "0000 1111 : 1011 1010 : 11 100 grg : i08"	, "bt %0 , %1" , 0 } , 
	{ "0000 1111 : 1011 1010 : mod 100 rm i08"		, "bt %p %0 , %1" , 0 } , 
	{ "0000 1111 : 1010 0011 : 11 grg grg:"			, "bt %1 , %0" , 0 } , 
	{ "0000 1111 : 1010 0011 : mod grg rm"			, "bt %p %1 , %0" , 0 } , 

	{ "0000 1111 : 1011 1010 : 11 111 grg : i08"	, "btc %0 , %1" , 0 } , 
	{ "0000 1111 : 1011 1010 : mod 111 rm   i08"	, "btc %p %0 , %1" , 0 } , 
	{ "0000 1111 : 1011 1011 : 11 grg grg:"			, "btc %1 , %0" , 0 } , 
	{ "0000 1111 : 1011 1011 : mod grg rm"			, "btc %p %1 , %0" , 0 } , 

	{ "0000 1111 : 1011 1010 : 11 110 grg : i08"	, "btr %0 , %1" , 0 } , 
	{ "0000 1111 : 1011 1010 : mod 110 rm i08"		, "btr %p %0 , %1" , 0 } , 
	{ "0000 1111 : 1011 0011 : 11 grg grg:"			, "btr %1 , %0" , 0 } , 
	{ "0000 1111 : 1011 0011 : mod grg rm"			, "btr %p %1 , %0" , 0 } , 
	
	{ "0000 1111 : 1011 1010 : 11 101 grg : i08"	, "bts %0 , %1" , 0 } , 
	{ "0000 1111 : 1011 1010 : mod 101 rm i08"		, "bts %p %0 , %1" , 0 } , 
	{ "0000 1111 : 1010 1011 : 11 grg grg:"			, "bts %1 , %0" , 0 } , 
	{ "0000 1111 : 1010 1011 : mod grg rm"			, "bts %p %1 , %0" , 0 } , 

	{ "1110 1000:c32"			, "call %0", 0 } ,		// call direct
	{ "1111 1111:11 010 grg:"	, "call %0", 0 } ,		// call indirect
	{ "1111 1111:mod 010 rm"	, "call %p %0", 0 } , 

	{ "1001 1000:" , "cbw" , 0 } , 
	{ "1001 1001:" , "cdq" , 0 } , 
	{ "1111 1000:" , "clc" , 0 } , 
	{ "1111 1100:" , "cld" , 0 } , 
	{ "1111 1010:" , "cli" , 0 } , 
	{ "1111 0101:" , "cmc" , 0 } , 
	
	{ "0000 1111: 0100 tttn : 11 grg grg:"		, "cmov%c %0 , %1" , 0 } , 
	{ "0000 1111: 0100 tttn : mod grg rm"		, "cmov%c %0 , %p %1" , 0 } , 
	
	{ "0011 10dw : 11 grg grg:"					, "cmp %1 , %0" , 0 } , 
	{ "0011 10dw : mod grg rm"					, "cmp %p %1 , %0" , 0 } , 
	{ "1000 00sw : 11 111 grg : i00 "			, "cmp %0 , %1" , 0 } , 
	{ "0011 110w eax : i00"						, "cmp %0 , %1" , 0 } , 
	{ "1000 00sw : mod 111 rm i00"				, "cmp %p %0 , %1" , 0 } , 
	
	{ "1010 0110:"								, "%rzcmpsb" , 0 } ,			
	{ "oas 1010 0111:"							, "%rzcmpsw" , 0 } , 
	{ "nas 1010 0111:"							, "%rzcmpsd" , 0 } , 
	
	{ "0000 1111 : 1011 000w : 11 grg grg:"		, "cmpxchg %1 , %0" , 0 } , 
	{ "0000 1111 : 1011 000w : mod grg rm"		, "cmpxchg %p %1 , %0" , 0 } , 

	{ "0000 1111 : 1100 0111 : a32"				, "cmpxchg8b qword ptr %0" , 0 } , 

	{ "0000 1111 : 1010 0010:"					, "cpuid" , 0 } , 
	{ "1001 1001:"								, "cwd" , 0 } , 
	{ "1001 1000:"								, "cwde" , 0 } , 
	{ "0010 0111:"								, "daa" , 0 } , 
	{ "0010 1111:"								, "das" , 0 } , 

	{ "1111 111w : 11 001 grg:"					, "dec %0" , 0 } , 
	{ "0100 1 grg:"								, "dec %0" , 0 } , 
	{ "1111 111w : mod 001 rm"					, "dec %p %0" , 0 } , 

	{ "1111 011w : 11 110 grg:"					, "div %0" , 0 } , 
	{ "1111 011w : mod 110 rm"					, "div %p %0" , 0 } , 

	{ "1100 1000 : i16 i08"						, "enter %0 , %1" , 0 } , 
	
	{ "1111 011w : 11 111 grg:"					, "idiv %0" , 0 } , 
	{ "1111 011w : mod 111 rm"					, "idiv %p %0" , 0 } , 
	
	{ "1111 011w : 11 101 grg:"					, "imul %0" , 0 } , 
	{ "1111 011w : mod 101 grg:"				, "imul %p %0" , 0 } , 
	{ "0000 1111 : 1010 1111 : 11 grg grg:"		, "imul %0 , %1" , 0 } , 
	{ "0000 1111 : 1010 1111 : mod grg rm"		, "imul %0 , %p %1" , 0 } , 
	{ "0110 10s1 : 11 grg grg: i00 "			, "imul %0 , %1 , %2" , 0 } , 
	{ "0110 10s1 : mod grg rm  i00 "			, "imul %0 , %p %1 , %2" , 0 } , 

	{ "1111 111w : 11 000 grg:"	, "inc %0" , 0 } , 
	{ "0100 0 grg:"				, "inc %0" , 0 } , 
	{ "1111 111w : mod 000 rm"	, "inc %p %0" , 0 } , 
	
	{ "1100 1101 : i08" , "int %0" , 0 } , 
	{ "1100 1100:"		, "int 3" , 0 } , 
	
	{ "1100 1110:"							, "into" , 0 } , 
	{ "1100 1111:"							, "iret" , 0 } , 

	{ "0111 tttn : j08"						, "j%c %0" , 0 } , 
	{ "0000 1111 : 1000 tttn : j32 "		, "j%c %0" , 0 } , 

	{ "oas 1110 0011 : j08"					, "jcxz %0" , 0 } , 
	{ "nas1110 0011 : j08"					, "jecxz %0" , 0 } , 

	{ "1110 1011 : j08"			, "jmp %0" , 0 } , 
	{ "1110 1001 : j32"			, "jmp %0" , 0 } , 
	{ "1111 1111 : 11 100 grg:"	, "jmp %0" , 0 } , 
	{ "1111 1111 : mod 100 rm"	, "jmp %p %0" , 0 } , 

	{ "1110 1010 : i32 i16 " , "jmp far %1 : %0" , 0 } , 
	{ "1111 1111 : mod 101 rm" , "jmp far %p %0 " , 0 } , 
	
	{ "1001 1111:" , "lahf" , 0 } , 
	
	{ "1100 0101 : mod grg rm"				, "lds %0" , 0 } , 
	{ "1000 1101 : mod grg rm"				, "lea %0 , %p %1" , 0 } , 

	{ "1100 1001:"							, "leave" , 0 } , 
	{ "1100 0100 : mod grg rm"				, "les %0 , %1" , 0 } , 
	{ "0000 1111 : 1011 0100 : mod grg rm"	, "lfs %0 , %1" , 0 } , 
 
	{ "0000 1111 : 1011 0101 : mod grg rm"	, "lgs %0 , %p %1" , 0 } , 

	{ "1010 1100:"		, "%r_lodsb" , 0 } , 
	{ "oas1010 1101:"	, "%r_lodsw" , 0 } , 
	{ "nas1010 1101:"	, "%r_lodsd" , 0 } , 

	{ "1110 0010 : j08" , "loop %0" , 0 } , 
	{ "1110 0001 : j08" , "loope %0" , 0 } , 

	{ "0000 1111 : 1011 0010 : mod grg rm" , "lss %0 , %p %1" , 0 } , 

	{ "1000 10dw:11 grg grg: "		, "mov %1 , %0" , 0 } ,	// mov reg reg

⌨️ 快捷键说明

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