#pragma once #include "IWzASM.h" #include "IWzASM.CmdBlk.Tools.h" //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // #pragma pack(push, 1) #pragma push_macro("INLINE") #pragma push_macro("CONST") #pragma push_macro("STATIC") #define INLINE __forceinline #define CONST const #define STATIC static #define CSTATIC STATIC CONST //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // struct IL { union { OPW_T X; struct { OPB_T L, H; }; }; IL( CONST OPW_T cCMD ) : X(cCMD) {} }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // template struct sIL { IL FIELD; sIL() : FIELD(_CMD) {} INLINE VOID Change( OPW_T cCMD ) { FIELD.X = cCMD; } }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // typedef sIL sIL_RET; typedef sIL sIL_NOP; typedef sIL sIL_MARK01; typedef sIL sIL_MARK02; typedef sIL sIL_MARK03; typedef sIL sIL_MARK04; typedef sIL sIL_MARK05; typedef sIL sIL_MARK06; typedef sIL sIL_MARK07; typedef sIL sIL_MARK08; typedef sIL sIL_MARK09; typedef sIL sIL_MARK10; typedef sIL sIL_MARK11; typedef sIL sIL_MARK12; typedef sIL sIL_MARK13; typedef sIL sIL_MARK14; typedef sIL sIL_MARK15; typedef sIL sIL_MARK16; typedef sIL sIL_MARK17; typedef sIL sIL_MARK18; typedef sIL sIL_MARK19; // 1byte MARK Á¶ÇÕ template struct sIL_MARKC { sIL M01; }; typedef sIL_MARKC sIL_MARKC01; typedef sIL_MARKC sIL_MARKC02; typedef sIL_MARKC sIL_MARKC03; typedef sIL_MARKC sIL_MARKC04; typedef sIL_MARKC sIL_MARKC05; typedef sIL_MARKC sIL_MARKC06; typedef sIL_MARKC sIL_MARKC07; typedef sIL_MARKC sIL_MARKC08; typedef sIL_MARKC sIL_MARKC09; typedef sIL_MARKC sIL_MARKC10; typedef sIL_MARKC sIL_MARKC11; typedef sIL_MARKC sIL_MARKC12; typedef sIL_MARKC sIL_MARKC13; typedef sIL_MARKC sIL_MARKC14; typedef sIL_MARKC sIL_MARKC15; typedef sIL_MARKC sIL_MARKC16; typedef sIL_MARKC sIL_MARKC17; typedef sIL_MARKC sIL_MARKC18; typedef sIL_MARKC sIL_MARKC19; #if !WzASM_UPDATE_0x5001 template struct sIL_MARK { sIL<_MARK> M01; }; // 1byte MARK Á¶ÇÕ template struct sIL_MARK_COMPOSE { sIL M01; }; #endif //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // template struct sDT { _TYPE VALUE; sDT() : VALUE(_VAL) {} inline VOID Change( _TYPE vVAL ) { VALUE = vVAL; } }; struct DT1 { BYTE L; DT1( CONST BYTE vVAL ) : L(vVAL) {} }; struct DT2 { union { WORD X; struct { BYTE L, H; }; }; DT2( CONST WORD vVAL ) : X(vVAL) {} }; struct DT4 { union { DWORD EX; WORD X; struct { union { struct { BYTE L, H; }; WORD LX; }; union { struct { BYTE L, H; }; WORD HX; }; }; }; DT4( CONST DWORD vVAL ) : EX(vVAL){} }; template struct sDT1 : sDT {}; // 1BYTE DATA template struct sDT2 : sDT {}; // 2BYTE DATA template struct sDT4 : sDT {}; // 4BYTE DATA template struct sDTH : sDT {}; // 2BYTE DATA template struct sDTM : sDT {}; // 1BYTE DATA - { OP(2B) | jmark(1B) } template struct sDTP : sDT {}; // 4BYTE DATA template struct sDTPK : sDT {}; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // template struct sDT_CALC { cOFF CALC; sDT_CALC() { CALC.DT = _DT;//(WORD)offsetof( _TYPE, _FIELD ); CALC.OP = _OP; } }; template struct sDT_CALC_T { cOFF CALC; sDT_CALC_T() { CALC.DT = (WORD)OFFSETOF( _TYPE, _FIELD ); CALC.OP = _OP; } }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // 6 BYTE struct sIL_CRYPT_BLK_HEADER_MAGIC { //sDT1<'W'> M01; //sDT1<0xF1> M02; //sDT1<'A'> M03; //sDT1<0x74> M04; //sDT1<'m'> M05; //sDT1<'4'> M06; BYTE MARRAY[6]; sIL_CRYPT_BLK_HEADER_MAGIC() { MARRAY[0] = 'W'; MARRAY[1] = 0xF1; MARRAY[2] = 'A'; MARRAY[3] = 0x74; MARRAY[4] = 'm'; MARRAY[5] = '4'; } }; // 6 BYTE + 7 BYTE struct sIL_CRYPT_BLK_HEADER { sIL_CRYPT_BLK_HEADER_MAGIC M01; sDT2<'7'> M02_CRYPT_KEY; sDT2<101> M03_VERSION; sDT1<0xF7> M04_TYPE; sDT1<0x90> M05; sDT1<0x83> M06; }; // 8 BYTE struct sIL_CRYPT_BLK_TAIL { sDT1<0x71> M01; sDT1<0x87> M02; sDT1<'A'> M03; sDT1<'s'> M04; sDT1<'m'> M05; sDT1<'|'> M06; sDT1<'i'> M07; sDT1<'x'> M08; }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // typedef sIL sIL_CLR_EAX; typedef sIL sIL_CLR_EBX; typedef sIL sIL_CLR_ECX; typedef sIL sIL_CLR_EDX; typedef sIL sIL_CLR_ERP; typedef sIL sIL_CLR_EOP; typedef sIL sIL_CLR_EABCDX; typedef sIL sIL_CLRA_EAX; typedef sIL sIL_CLRA_EBX; typedef sIL sIL_CLRA_ECX; typedef sIL sIL_CLRA_EDX; typedef sIL sIL_CLRA_ERP; typedef sIL sIL_CLRA_EOP; typedef sIL sIL_CLRA_EABCDX; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // typedef sIL sIL_MOV_EAX_EBX; typedef sIL sIL_MOV_EAX_ECX; typedef sIL sIL_MOV_EAX_EDX; typedef sIL sIL_MOV_EAX_ERP; typedef sIL sIL_MOV_EAX_EOP; typedef sIL sIL_MOV_EBX_EAX; typedef sIL sIL_MOV_EBX_ECX; typedef sIL sIL_MOV_EBX_EDX; typedef sIL sIL_MOV_EBX_ERP; typedef sIL sIL_MOV_EBX_EOP; typedef sIL sIL_MOV_ECX_EAX; typedef sIL sIL_MOV_ECX_EBX; typedef sIL sIL_MOV_ECX_EDX; typedef sIL sIL_MOV_ECX_ERP; typedef sIL sIL_MOV_ECX_EOP; typedef sIL sIL_MOV_EDX_EAX; typedef sIL sIL_MOV_EDX_EBX; typedef sIL sIL_MOV_EDX_ECX; typedef sIL sIL_MOV_EDX_ERP; typedef sIL sIL_MOV_EDX_EOP; typedef sIL sIL_MOV_ERP_EAX; typedef sIL sIL_MOV_ERP_EBX; typedef sIL sIL_MOV_ERP_ECX; typedef sIL sIL_MOV_ERP_EDX; typedef sIL sIL_MOV_ERP_EOP; typedef sIL sIL_MOV_EOP_EAX; typedef sIL sIL_MOV_EOP_EBX; typedef sIL sIL_MOV_EOP_ECX; typedef sIL sIL_MOV_EOP_EDX; typedef sIL sIL_MOV_EOP_EOP; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // typedef sIL sIL_MOV_ERP_OFF; // ERP[1].CALC = CALC(_DT, _OP) template struct sIL_MOV_ERP_CALC_BLK { sIL_MOV_ERP_OFF M01; sDT_CALC<_DT, _OP> M02; }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ /* REG[0].EX = (_TYPE)_VAL */ template struct sIL_MOV_VAL { sIL<_CMD> M01; _DECLTYPE M02; inline VOID ChangeVAL( _TYPE vVAL ) { M02.Change( vVAL ); } }; /* REG[0].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX_B1 : sIL_MOV_VAL, 0> {}; /* REG[0].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX_B2 : sIL_MOV_VAL, 0> {}; /* REG[0].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX_B4 : sIL_MOV_VAL, 0> {}; /* REG[0].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX_HASH : sIL_MOV_VAL, 0> {}; /* REG[0].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX_PTR : sIL_MOV_VAL, 0> {}; /* REG[0].EX = (_TYPE)_VAL */ template struct sIL_MOV_EBX_B1 : sIL_MOV_VAL, 0> {}; /* REG[0].EX = (_TYPE)_VAL */ template struct sIL_MOV_EBX_B2 : sIL_MOV_VAL, 0> {}; /* REG[0].EX = (_TYPE)_VAL */ template struct sIL_MOV_EBX_B4 : sIL_MOV_VAL, 0> {}; /* REG[0].EX = (_TYPE)_VAL */ template struct sIL_MOV_EBX_HASH : sIL_MOV_VAL, 0> {}; /* REG[0].EX = (_TYPE)_VAL */ template struct sIL_MOV_EBX_PTR : sIL_MOV_VAL, 0> {}; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // /* REG[0].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX0_B1 : sIL_MOV_VAL, 0> {}; /* REG[0].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX0_B2 : sIL_MOV_VAL, 0> {}; /* REG[0].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX0_B4 : sIL_MOV_VAL, 0> {}; /* REG[0].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX0_HASH : sIL_MOV_VAL, 0> {}; /* REG[0].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX0_PTR : sIL_MOV_VAL, 0> {}; // template struct sIL_MOV_EAX1_B1 : sIL_MOV_VAL, 0> {}; /* REG[1].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX1_B2 : sIL_MOV_VAL, 0> {}; /* REG[1].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX1_B4 : sIL_MOV_VAL, 0> {}; /* REG[1].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX1_HASH : sIL_MOV_VAL, 0> {}; /* REG[1].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX1_PTR : sIL_MOV_VAL, 0> {}; // /* REG[2].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX2_B1 : sIL_MOV_VAL, 0> {}; /* REG[2].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX2_B2 : sIL_MOV_VAL, 0> {}; /* REG[2].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX2_B4 : sIL_MOV_VAL, 0> {}; /* REG[2].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX2_HASH : sIL_MOV_VAL, 0> {}; /* REG[2].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX2_PTR : sIL_MOV_VAL, 0> {}; // /* REG[3].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX3_B1 : sIL_MOV_VAL, 0> {}; /* REG[3].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX3_B2 : sIL_MOV_VAL, 0> {}; /* REG[3].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX3_B4 : sIL_MOV_VAL, 0> {}; /* REG[3].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX3_HASH : sIL_MOV_VAL, 0> {}; /* REG[3].EX = (_TYPE)_VAL */ template struct sIL_MOV_EAX3_PTR : sIL_MOV_VAL, 0> {}; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // template< typename _TYPE, OPW_T _CMD, typename _DECLTYPE1, typename _DECLTYPE2, typename _DECLTYPE3, typename _DECLTYPE4, typename BYTE _SZ > struct sIL_MOV_EAX_ARR4_VAL { sIL<_CMD> M01; _DECLTYPE1 M02_ARG0; _DECLTYPE2 M03_ARG1; _DECLTYPE3 M04_ARG2; _DECLTYPE4 M05_ARG3; }; template< typename _TYPE, OPW_T _CMD, typename _DECLTYPE1, typename _DECLTYPE2, typename _DECLTYPE3, typename BYTE _SZ > struct sIL_MOV_EAX_ARR3_VAL { sIL<_CMD> M01; _DECLTYPE1 M02_ARG0; _DECLTYPE2 M03_ARG1; _DECLTYPE3 M04_ARG2; }; template< typename _TYPE, OPW_T _CMD, typename _DECLTYPE1, typename _DECLTYPE2, typename BYTE _SZ > struct sIL_MOV_EAX_ARR2_VAL { sIL<_CMD> M01; _DECLTYPE1 M02_ARG0; _DECLTYPE2 M03_ARG1; }; template struct sIL_MOV_EAX_EXA4B1 : sIL_MOV_EAX_ARR4_VAL, sDT1<_B2>, sDT1<_VAL3>, sDT1<_B4>, 0> {}; template struct sIL_MOV_EAX_EXA4B2 : sIL_MOV_EAX_ARR4_VAL, sDT2<_B2>, sDT2<_VAL3>, sDT2<_B4>, 0> {}; template struct sIL_MOV_EAX_EXA4B4 : sIL_MOV_EAX_ARR4_VAL, sDT4<_B2>, sDT4<_VAL3>, sDT4<_B4>, 0> {}; template struct sIL_MOV_EAX_EXA4HS : sIL_MOV_EAX_ARR4_VAL, sDTH<_B2>, sDTH<_VAL3>, sDTH<_B4>, 0> {}; ////////////////////////////////////////////////////////////////////////// template struct sIL_MOV_EAX_EXA3B1 : sIL_MOV_EAX_ARR3_VAL, sDT1<_B2>, sDT1<_VAL3>, 0> {}; template struct sIL_MOV_EAX_EXA3B2 : sIL_MOV_EAX_ARR3_VAL, sDT2<_B2>, sDT2<_VAL3>, 0> {}; template struct sIL_MOV_EAX_EXA3B4 : sIL_MOV_EAX_ARR3_VAL, sDT4<_B2>, sDT4<_VAL3>, 0> {}; template struct sIL_MOV_EAX_EXA3HS : sIL_MOV_EAX_ARR3_VAL, sDTH<_B2>, sDTH<_VAL3>, 0> {}; ////////////////////////////////////////////////////////////////////////// template struct sIL_MOV_EAX_EXA2B1 : sIL_MOV_EAX_ARR2_VAL, sDT1<_B2>, 0> {}; template struct sIL_MOV_EAX_EXA2B2 : sIL_MOV_EAX_ARR2_VAL, sDT2<_B2>, 0> {}; template struct sIL_MOV_EAX_EXA2B4 : sIL_MOV_EAX_ARR2_VAL, sDT4<_B2>, 0> {}; template struct sIL_MOV_EAX_EXA2HS : sIL_MOV_EAX_ARR2_VAL, sDTH<_B2>, 0> {}; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // MOV & PUSH // (1) E(A/D)X = E(A/D)X // PUSH E(A/D)X // (2) E(A/B)X = VAL_xx // PUSH E(A/B)X template struct sIL_MOVnPUSH { _MOVCMD M01; sIL<_PUSHCMD> M02; }; // (2) E(A/B)X = VAL_xx // PUSH E(A/B)X template struct sIL_MOVnPUSH_REG_VAL : sIL_MOVnPUSH, _PUSHCMD> {}; ////////////////////////////////////////////////////////////////////////// template struct sIL_MOVnPUSH_EAX_B1 : sIL_MOVnPUSH_REG_VAL, IWzASM::PUSH_EAX> {}; template struct sIL_MOVnPUSH_EAX_B2 : sIL_MOVnPUSH_REG_VAL, IWzASM::PUSH_EAX> {}; template struct sIL_MOVnPUSH_EAX_B4 : sIL_MOVnPUSH_REG_VAL, IWzASM::PUSH_EAX> {}; template struct sIL_MOVnPUSH_EAX_HASH : sIL_MOVnPUSH_REG_VAL, IWzASM::PUSH_EAX> {}; template struct sIL_MOVnPUSH_EAX_PTR : sIL_MOVnPUSH_REG_VAL, IWzASM::PUSH_EAX> {}; // template struct sIL_MOVnPUSH_EBX_B1 : sIL_MOVnPUSH_REG_VAL, IWzASM::PUSH_EBX> {}; template struct sIL_MOVnPUSH_EBX_B2 : sIL_MOVnPUSH_REG_VAL, IWzASM::PUSH_EBX> {}; template struct sIL_MOVnPUSH_EBX_B4 : sIL_MOVnPUSH_REG_VAL, IWzASM::PUSH_EBX> {}; template struct sIL_MOVnPUSH_EBX_HASH : sIL_MOVnPUSH_REG_VAL, IWzASM::PUSH_EBX> {}; template struct sIL_MOVnPUSH_EBX_PTR : sIL_MOVnPUSH_REG_VAL, IWzASM::PUSH_EBX> {}; ////////////////////////////////////////////////////////////////////////// struct sIL_MOVnPUSH_EAX_EBX : sIL_MOVnPUSH {}; struct sIL_MOVnPUSH_EAX_ECX : sIL_MOVnPUSH {}; struct sIL_MOVnPUSH_EAX_EDX : sIL_MOVnPUSH {}; struct sIL_MOVnPUSH_EAX_ERP : sIL_MOVnPUSH {}; struct sIL_MOVnPUSH_EBX_EAX : sIL_MOVnPUSH {}; struct sIL_MOVnPUSH_EBX_ECX : sIL_MOVnPUSH {}; struct sIL_MOVnPUSH_EBX_EDX : sIL_MOVnPUSH {}; struct sIL_MOVnPUSH_EBX_ERP : sIL_MOVnPUSH {}; struct sIL_MOVnPUSH_ECX_EAX : sIL_MOVnPUSH {}; struct sIL_MOVnPUSH_ECX_EBX : sIL_MOVnPUSH {}; struct sIL_MOVnPUSH_ECX_EDX : sIL_MOVnPUSH {}; struct sIL_MOVnPUSH_ECX_ERP : sIL_MOVnPUSH {}; struct sIL_MOVnPUSH_EDX_EAX : sIL_MOVnPUSH {}; struct sIL_MOVnPUSH_EDX_EBX : sIL_MOVnPUSH {}; struct sIL_MOVnPUSH_EDX_ECX : sIL_MOVnPUSH {}; struct sIL_MOVnPUSH_EDX_ERP : sIL_MOVnPUSH {}; struct sIL_MOVnPUSH_ERP_EAX : sIL_MOVnPUSH {}; struct sIL_MOVnPUSH_ERP_EBX : sIL_MOVnPUSH {}; struct sIL_MOVnPUSH_ERP_ECX : sIL_MOVnPUSH {}; struct sIL_MOVnPUSH_ERP_EDX : sIL_MOVnPUSH {}; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // STORE // ·¹Áö½ºÅ͸¦ »ç¿ëÇÏÁö ¾Ê°í Á÷Á¢ ÀÔ·Â // PUSH VAL_xx template struct sIL_PUSH_VAL { sIL<_PUSHCMD> M01; _DECLTYPE M02; inline VOID Change( _TYPE vVAL ) { M01.Change( vVAL ); } }; template struct sIL_PUSH_B1 : sIL_PUSH_VAL, IWzASM::PUSH_B1> {}; template struct sIL_PUSH_B2 : sIL_PUSH_VAL, IWzASM::PUSH_B2> {}; template struct sIL_PUSH_B4 : sIL_PUSH_VAL, IWzASM::PUSH_B4> {}; template struct sIL_PUSH_HASH : sIL_PUSH_VAL, IWzASM::PUSH_HASH> {}; ////¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ //// EBX = VAL_xx //// EAX += EBX //template //struct sIL_ADD32_EAX_VAL //{ // sIL<_CMD> M01; // _DECLTYPE M02; // sIL M03; // // inline VOID Change( _TYPE vVAL ) // { M02.Change( vVAL ); } //}; // //template //struct sIL_ADD32_EAX_B1 : sIL_ADD32_EAX_VAL, 0> {}; // //template //struct sIL_ADD32_EAX_B2 : sIL_ADD32_EAX_VAL, 0> {}; // //template //struct sIL_ADD32_EAX_B4 : sIL_ADD32_EAX_VAL, 0> {}; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // <±âº»> EAX´Â ¸ÞÀÎ ¿¬»ê °ø°£ (µ¡¼ÀÀº ¼ø¼­¿¡ »ó°ü¾øÀ½) // EAX, EBX // EAX : ¿¬»êµÈ Àå¼Ò // // _LDEBX : EBX¿¡ ·ÎµåÇÏ´Â ÇüÅ CMD BLOCK // // EAX += EBX template struct sIL_OP_EAX_PLUS_XXX { _LDEBX M01; sIL M02; }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // <±âº»> EAX´Â ¸ÞÀÎ ¿¬»ê °ø°£ (µ¡¼ÀÀº ¼ø¼­¿¡ »ó°ü¾øÀ½) // EAX, EBX // EAX : ¿¬»êµÈ Àå¼Ò // // _LDEBX : EAX¿¡ ·ÎµåÇÏ´Â ÇüÅ CMD BLOCK // // EBX += EAX template struct sIL_OP_EBX_PLUS_XXX { _LDEAX M01; sIL M02; }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // EAX = EAX + VAL_xx // 1) EBX = VAL_xx (M01.M02) // 2) EAX += EBX template struct sIL_OP_EAX_PLUS_B1 : sIL_OP_EAX_PLUS_XXX, 0> {}; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // EAX = EAX + VAL_xx // 1) EBX = VAL_xx (M01.M02) // 2) EAX += EBX template struct sIL_OP_EAX_PLUS_B2 : sIL_OP_EAX_PLUS_XXX, 0> {}; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // EAX = EAX + VAL_xx // 1) EBX = VAL_xx (M01.M02) // 2) EAX += EBX template struct sIL_OP_EAX_PLUS_B4 : sIL_OP_EAX_PLUS_XXX, 0> {}; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // EAX = EAX + VAL_xx // 1) EBX = VAL_xx (M01.M02) // 2) EAX += EBX template struct sIL_OP_EBX_PLUS_B1 : sIL_OP_EBX_PLUS_XXX, 0> {}; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // EAX = EAX + VAL_xx // 1) EBX = VAL_xx (M01.M02) // 2) EAX += EBX template struct sIL_OP_EBX_PLUS_B2 : sIL_OP_EBX_PLUS_XXX, 0> {}; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // EAX = EAX + VAL_xx // 1) EBX = VAL_xx (M01.M02) // 2) EAX += EBX template struct sIL_OP_EBX_PLUS_B4 : sIL_OP_EBX_PLUS_XXX, 0> {}; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // EAX += ExX typedef sIL_OP_EAX_PLUS_XXX sIL_OP_EAX_PLUS_ECX; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // EAX += ExX typedef sIL_OP_EAX_PLUS_XXX sIL_OP_EAX_PLUS_EDX; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // EAX += ExX typedef sIL_OP_EAX_PLUS_XXX sIL_OP_EAX_PLUS_ERP; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // EBX += ExX typedef sIL_OP_EBX_PLUS_XXX sIL_OP_EBX_PLUS_ECX; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // EBX += ExX typedef sIL_OP_EBX_PLUS_XXX sIL_OP_EBX_PLUS_EDX; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // EBX += ExX typedef sIL_OP_EBX_PLUS_XXX sIL_OP_EBX_PLUS_ERP; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // <±âº»> EAX´Â ¸ÞÀÎ ¿¬»ê °ø°£ (¼ø¼­ »ó°ü ÀÖÀ½) // EAX, EBX // EAX : ¿¬»êµÈ Àå¼Ò // // _LDEBX : EBX¿¡ ·ÎµåÇÏ´Â ÇüÅ CMD BLOCK // // EAX -= EBX // // EAX = EAX - VAL_xx // 1) EBX = VAL_xx // 2) EAX -= EBX template struct sIL_OP_EAX_MINUS_XXX { _LDEBX M01; sIL M02; }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // <±âº»> EAX´Â ¸ÞÀÎ ¿¬»ê °ø°£ (¼ø¼­ »ó°ü ÀÖÀ½) // EAX, EBX // EAX : ¿¬»êµÈ Àå¼Ò // // _LDEAX : EBX¿¡ ·ÎµåÇÏ´Â ÇüÅ CMD BLOCK // // EBX -= EAX // // EBX = EBX - VAL_xx // 1) EAX = VAL_xx // 2) EBX -= EAX template struct sIL_OP_EBX_MINUS_XXX { _LDEAX M01; sIL M02; }; // // EAX = EAX - VAL_xx // 1) EBX = VAL_xx // 2) EAX -= EBX template struct sIL_OP_EAX_MINUS_B1 : sIL_OP_EAX_MINUS_XXX, 0> {}; template struct sIL_OP_EAX_MINUS_B2 : sIL_OP_EAX_MINUS_XXX, 0> {}; template struct sIL_OP_EAX_MINUS_B4 : sIL_OP_EAX_MINUS_XXX, 0> {}; // // EBX = EBX - VAL_xx // 1) EAX = VAL_xx // 2) EBX -= EAX template struct sIL_OP_EBX_MINUS_B1 : sIL_OP_EBX_MINUS_XXX, 0> {}; template struct sIL_OP_EBX_MINUS_B2 : sIL_OP_EBX_MINUS_XXX, 0> {}; template struct sIL_OP_EBX_MINUS_B4 : sIL_OP_EBX_MINUS_XXX, 0> {}; // EAX -= ExX typedef sIL_OP_EAX_MINUS_XXX sIL_OP_EAX_MINUS_ECX; typedef sIL_OP_EAX_MINUS_XXX sIL_OP_EAX_MINUS_EDX; typedef sIL_OP_EAX_MINUS_XXX sIL_OP_EAX_MINUS_ERP; // EBX -= ExX typedef sIL_OP_EBX_MINUS_XXX sIL_OP_EBX_MINUS_ECX; typedef sIL_OP_EBX_MINUS_XXX sIL_OP_EBX_MINUS_EDX; typedef sIL_OP_EBX_MINUS_XXX sIL_OP_EBX_MINUS_ERP; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // <±âº»> EAX´Â ¸ÞÀÎ ¿¬»ê °ø°£ (¼ø¼­ »ó°ü ¾øÀ½) // EAX, EBX // EAX : ¿¬»êµÈ Àå¼Ò // // _LDEBX : EBX¿¡ ·ÎµåÇÏ´Â ÇüÅ CMD BLOCK // // EAX *= EBX, -or- EBX *= EAX // // EAX = EAX * VAL_xx // 1) EBX = VAL_xx // 2) EAX *= VAL_xx template struct sIL_OP_EAX_MUL_XXX { _LDEBX M01; sIL M02; }; //template //struct sIL_OP_EBX_MUL_XXX //{ // _LDEBX M01; // sIL M02; //}; // // 1) EBX = VAL_xx // 2) EAX *= EBX template struct sIL_OP_EAX_MUL_B1 : sIL_OP_EAX_MUL_XXX, 0> {}; template struct sIL_OP_EAX_MUL_B2 : sIL_OP_EAX_MUL_XXX, 0> {}; template struct sIL_OP_EAX_MUL_B4 : sIL_OP_EAX_MUL_XXX, 0> {}; //// //// 1) EAX = VAL_xx //// 2) EBX *= EAX //template struct sIL_OP_EBX_MUL_B1 : sIL_OP_EBX_MUL_XXX, 0> {}; //template struct sIL_OP_EBX_MUL_B2 : sIL_OP_EBX_MUL_XXX, 0> {}; //template struct sIL_OP_EBX_MUL_B4 : sIL_OP_EBX_MUL_XXX, 0> {}; // EAX *= ExX typedef sIL_OP_EAX_MUL_XXX sIL_OP_EAX_MUL_ECX; typedef sIL_OP_EAX_MUL_XXX sIL_OP_EAX_MUL_EDX; typedef sIL_OP_EAX_MUL_XXX sIL_OP_EAX_MUL_ERP; //// EBX *= ExX //typedef sIL_OP_EBX_MUL_XXX sIL_OP_EBX_MUL_ECX; //typedef sIL_OP_EBX_MUL_XXX sIL_OP_EBX_MUL_EDX; //typedef sIL_OP_EBX_MUL_XXX sIL_OP_EBX_MUL_ERP; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // <±âº»> EAX´Â ¸ÞÀÎ ¿¬»ê °ø°£ (¼ø¼­ »ó°ü ¾øÀ½) // EAX, EBX // EAX : ¿¬»êµÈ Àå¼Ò // // _LDEBX : EBX¿¡ ·ÎµåÇÏ´Â ÇüÅ CMD BLOCK // // EAX /= EBX, -or- EBX /= EAX // // EAX = EAX / VAL_xx // 1) EBX = VAL_xx // 2) EAX /= VAL_xx template struct sIL_OP_EAX_DIV_XXX { _LDEBX M01; sIL M02; }; //template //struct sIL_OP_EBX_DIV_XXX //{ // _LDEBX M01; // sIL M02; //}; // // 1) EBX = VAL_xx // 2) EAX /= EBX template struct sIL_OP_EAX_DIV_B1 : sIL_OP_EAX_DIV_XXX, 0> {}; template struct sIL_OP_EAX_DIV_B2 : sIL_OP_EAX_DIV_XXX, 0> {}; template struct sIL_OP_EAX_DIV_B4 : sIL_OP_EAX_DIV_XXX, 0> {}; //// //// 1) EAX = VAL_xx //// 2) EBX /= EAX //template struct sIL_OP_EBX_DIV_B1 : sIL_OP_EBX_DIV_XXX, 0> {}; //template struct sIL_OP_EBX_DIV_B2 : sIL_OP_EBX_DIV_XXX, 0> {}; //template struct sIL_OP_EBX_DIV_B4 : sIL_OP_EBX_DIV_XXX, 0> {}; // EAX /= ExX typedef sIL_OP_EAX_DIV_XXX sIL_OP_EAX_DIV_ECX; typedef sIL_OP_EAX_DIV_XXX sIL_OP_EAX_DIV_EDX; typedef sIL_OP_EAX_DIV_XXX sIL_OP_EAX_DIV_ERP; //// EBX /= ExX //typedef sIL_OP_EBX_DIV_XXX sIL_OP_EBX_DIV_ECX; //typedef sIL_OP_EBX_DIV_XXX sIL_OP_EBX_DIV_EDX; //typedef sIL_OP_EBX_DIV_XXX sIL_OP_EBX_DIV_ERP; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // <±âº»> // ++EAX, ++EBX typedef sIL sIL_INC_EAX; typedef sIL sIL_INC_EBX; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // <±âº»> // --EAX, --EBX typedef sIL sIL_DEC_EAX; typedef sIL sIL_DEC_EBX; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // <±âº»> // (TEST_ExX != 0), EFL:TEST_RET = { != 0, == 0 } // (ExX compare ExX), EFL:TEST_RET = { <, >, ==, !(<), !(>) } //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // <±âº»> // (ExX != 0), (TRUE) EFL:TEST_RET = { <, >, == } template struct sIL_CMP { sIL<_CMD> M01; }; typedef sIL_CMP sIL_TEST_EAX; typedef sIL_CMP sIL_TEST_EBX; typedef sIL_CMP sIL_TEST_ECX; typedef sIL_CMP sIL_TEST_EDX; typedef sIL_CMP sIL_TEST_ERP; typedef sIL_CMP sIL_TEST_EOP; typedef sIL_CMP sIL_CMP_EAX_EBX; typedef sIL_CMP sIL_CMP_EAX_ECX; typedef sIL_CMP sIL_CMP_EAX_EDX; typedef sIL_CMP sIL_CMP_EAX_ERP; typedef sIL_CMP sIL_CMP_ECX_EBX; typedef sIL_CMP sIL_CMP_ECX_ECX; typedef sIL_CMP sIL_CMP_ECX_EDX; typedef sIL_CMP sIL_CMP_ECX_ERP; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // <±âº»> // (EFL:TEST_RET (cond.) (val) ) // switch( EFL ) { >, <, >= <=, ==, !=, == 0, != 0 } template struct sIL_COND_JUMP { sIL<_CMD> M01; sDTM<_JMARK> M02; inline VOID ChangeCMD( OPW_T wCMD ) { M01.Change( wCMD ); } inline VOID ChangeMARK( OPB_T jMARK ) { M02.Change( jMARK ); } }; template struct sIL_COND_ZERO_EQUAL : sIL_COND_JUMP {}; template struct sIL_COND_ZERO_NOT_EQUAL : sIL_COND_JUMP {}; template struct sIL_COND_EQUAL : sIL_COND_JUMP {}; template struct sIL_COND_NOT_EQUAL : sIL_COND_JUMP {}; template struct sIL_COND_BELOW : sIL_COND_JUMP {}; template struct sIL_COND_NOT_BELOW : sIL_COND_JUMP {}; template struct sIL_COND_ABOVE : sIL_COND_JUMP {}; template struct sIL_COND_NOT_ABOVE : sIL_COND_JUMP {}; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // <ºñ±³¹®> // <, >, ==, !=, == 0, != 0 template struct sIL_IF_THEN_ELSE { _EXPRCOND M01; sIL_COND_JUMP<_CMPCMD, _JMPMARK> M02; }; template struct sIL_IF_THEN_ELSE_IS_ZERO : sIL_IF_THEN_ELSE<_EXPRCOND, IWzASM::JZEROEQUAL, _JMPMARK> {}; template struct sIL_IF_THEN_ELSE_IS_NOT_ZERO : sIL_IF_THEN_ELSE<_EXPRCOND, IWzASM::JZERONOTEQUAL, _JMPMARK> {}; template struct sIL_IF_THEN_ELSE_IS_EQUAL : sIL_IF_THEN_ELSE<_EXPRCOND, IWzASM::JEQUAL, _JMPMARK> {}; template struct sIL_IF_THEN_ELSE_IS_NOT_EQUAL : sIL_IF_THEN_ELSE<_EXPRCOND, IWzASM::JNOTEQUAL, _JMPMARK> {}; template struct sIL_IF_THEN_ELSE_IS_BELOW : sIL_IF_THEN_ELSE<_EXPRCOND, IWzASM::JBELOW, _JMPMARK> {}; template struct sIL_IF_THEN_ELSE_IS_NOT_BELOW : sIL_IF_THEN_ELSE<_EXPRCOND, IWzASM::JNOTBELOW, _JMPMARK> {}; template struct sIL_IF_THEN_ELSE_IS_ABOVE : sIL_IF_THEN_ELSE<_EXPRCOND, IWzASM::JABOVE, _JMPMARK> {}; template struct sIL_IF_THEN_ELSE_IS_NOT_ABOVE : sIL_IF_THEN_ELSE<_EXPRCOND, IWzASM::JNOTABOVE, _JMPMARK> {}; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // <±âº»> ¹«Á¶°Ç ºÐ±â // goto MARK(x) template struct sIL_JUMP { sIL M01; sDT1<_JMARK> M02; }; // template struct sIL_JUMPn { sIL<_CMD> M01; }; typedef sIL_JUMPn sIL_JUMP1; typedef sIL_JUMPn sIL_JUMP2; typedef sIL_JUMPn sIL_JUMP3; typedef sIL_JUMPn sIL_JUMP4; typedef sIL_JUMPn sIL_JUMP5; typedef sIL_JUMPn sIL_JUMP6; typedef sIL_JUMPn sIL_JUMP7; typedef sIL_JUMPn sIL_JUMP8; typedef sIL_JUMPn sIL_JUMP9; typedef sIL_JUMPn sIL_JUMP10; typedef sIL_JUMPn sIL_JUMP11; typedef sIL_JUMPn sIL_JUMP12; typedef sIL_JUMPn sIL_JUMP13; typedef sIL_JUMPn sIL_JUMP14; typedef sIL_JUMPn sIL_JUMP15; typedef sIL_JUMPn sIL_JUMP16; typedef sIL_JUMPn sIL_JUMP17; typedef sIL_JUMPn sIL_JUMP18; typedef sIL_JUMPn sIL_JUMP19; template struct sIL_JUMP_COMPOSE : sIL_JUMPn {}; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // Á¶°Ç Ç¥Çö½Ä ¾øÀÌ EFL 0ÀÎÁö ¾Æ´ÑÁöÀÇ ¿©ºÎ ÆÇ´Ü template struct sIL_IFZERO_THEN_ELSE { sIL M01; sDTM<_JMPMARK> M02; inline VOID Change( OPB_T mMARK ) { M02.Change( mMARK ); } }; template struct sIL_IFNZERO_THEN_ELSE { sIL M01; sDTM<_JMPMARK> M02; inline VOID Change( OPB_T mMARK ) { M02.Change( mMARK ); } }; //template //struct sIL_FOR_LOOP //{ // sIL_CLR_EAX M01; // sIL_CLR_ECX M02; // _EBXIL M03; // sIL_JUMP11 M04; // //sIL_MARK01 M05; // sIL_MARKC<_MARK4LOOP> M05; // sIL M06; // sIL M07; // sIL M08; // _USRCODE M09; // sIL M10; // sIL_MARK11 M11; // sIL_IF_THEN_ELSE_IS_BELOW M12; //}; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // template< typename _INIT, typename _EXPR, typename _ITR, typename _LOGIC, typename OPB_T _EXPRMARK, typename OPB_T _LOOPMARK > struct sIL_FORLOOP_RAW { _INIT M01; sIL_JUMP_COMPOSE<_EXPRMARK> M02; sIL_MARKC<_LOOPMARK> M03; _ITR M04; sIL M05; _LOGIC M06; sIL M07; sIL_MARKC<_EXPRMARK> M08; _EXPR M09; }; // LOAD to EBX template struct sIL_FORLOOP_ZEROtoUPPER_COUNTING_LOOP_INIT_REG { sIL_CLR_EAX M01; sIL_CLR_ERP M02; _CMD M03; }; struct sIL_FORLOOP_ZEROtoUPPER_COUNTING_LOOP_ITERATOR { sIL M02; }; // // EBX : UPPER LIMIT // EAX : INCREASE COUNT // ECX // ÀÌ ·çƾÀ¸·Î ÁøÀԽà EDX °ø°£¸¸ÀÌ »ç¿ë °¡´ÉÇÏ´Ù. ÁÖÀÇÇÒ °Í. template struct sIL_FORLOOP_ZEROtoUPPER_COUNTING_LOOP : sIL_FORLOOP_RAW< sIL_FORLOOP_ZEROtoUPPER_COUNTING_LOOP_INIT_REG, 0>, sIL_IF_THEN_ELSE_IS_BELOW, sIL_FORLOOP_ZEROtoUPPER_COUNTING_LOOP_ITERATOR, _USRCODE, _EXPRMARK, _LOOPMARK > { }; // ÀÌ ·çƾÀ¸·Î ÁøÀԽà EDX °ø°£¸¸ÀÌ »ç¿ë °¡´ÉÇÏ´Ù. ÁÖÀÇÇÒ °Í. template struct sIL_FORLOOP_USR_DEFINE_COUNTING_LOOP : sIL_FORLOOP_RAW< _INITCODE, sIL_IF_THEN_ELSE_IS_BELOW, _ITR, _USRCODE, _EXPRMARK, _LOOPMARK > { }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // CALL_IBF -> Call Reserved Internal Base Function // - IBF ÇÔ¼ö´Â Á¤ÇØÁø º°µµÀÇ Á¤ÇØÁø EFP°¡ Á¸ÀçÇÑ´Ù. // // // ERP = (IBF*)( POP() ); template struct sIL_CALL_IBF_PTR { sIL M01; // Call Base Function sDT M02; // Internal Base Function inline VOID Change( HandlerIBF fnPTR ) { M02.Change( fnPTR ); } }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // CALL_IBF Çü½Ä // - ÀÎÀÚ´Â ÀÌ¹Ì ½ºÅÿ¡ PUSHµÇ¾î ÀÖÀ¸¸ç, // [0]ÀÇ À§Ä¡¿¡´Â EFP·Î Ȱ¿ë°¡´ÉÇÑ ÇÔ¼ö Æ÷ÀÎÅÍ µî·ÏµÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. // - ½ºÅà PUSH,POPÀ¸·Î ƯÁ¤ ·¹Áö½ºÅͰ¡ ¾Æ´Ñ À§Ä¡¿¡ ´ëÇØ GENERAL CALLÀ» ¼öÇàÇÑ´Ù. // // // EFP = POP(); // PUSH( EFP ); // ERP = (EFP[0]*)( POP() ); struct sIL_CALL_IBF_STK_EFP { sIL M01; sIL M02; sIL M03; }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // CALL_IBF Çü½Ä // - ÀÎÀÚ´Â ÀÌ¹Ì ½ºÅÿ¡ PUSHµÇ¾î ÀÖ´Ù. // // // EFP[0] = FIND_HASH(_HASH) // ERP = (EFP[0]*)( POP() ); template struct sIL_CALL_IBF_HASH { sIL M01; sDTH<_HASH> M02; sIL M03; inline VOID ChangeHASH( WzASM_IBF_HASH_T wHASH_IBF ) { M02.Change( wHASH_IBF ); }; }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // CALL_IBF Çü½Ä // - ÀÎÀÚ´Â »ç¿ëÀÚ°¡ Á÷Á¢ ÀÔ·ÂÇÑ´Ù. // // // (_PUSHCODES) // EFP[0] = FIND_HASH(_HASH) // ERP = (EFP[0]*)( POP() ); template struct sIL_CALL_IBF_HASH_USRINPUT { _PUSHCODES M01; sIL_CALL_IBF_HASH<_HASH> M02; inline VOID ChangeHASH( WzASM_IBF_HASH_T wHASH_IBF ) { M02.ChangeHASH( wHASH_IBF ); }; }; ////¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ //// //// ÀÌÀü °á°ú°ª EAX¸¦ ÀÎÀÚ·Î ¹Þ¾ÆµéÀδÙ. //// °á°ú°ª EAX°ªÀº À¯ÁöµÈ´Ù. //struct sIL_FAST_CALL_RIB //{ // sIL M01; // Find Base Function by EAX // sIL M02; // Call Base Function //}; // ////¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ //// ÀÌÀü °á°ú°ª EAX¸¦ ÀÎÀÚ·Î ¹Þ¾ÆµéÀδÙ. //// °á°ú°ª EAX°ªÀº À¯ÁöÇÏÁö ¸øÇÑ´Ù. //template //struct sIL_CALL_RC //{ // _INPUTARG M01; // ÇÔ¼öÈ£Ã⠽à ÀÎÀÚ·Î ³ÖÀ» °ª // sIL M02; // Find Base Function by HASH // sDT M03; // HASHCODE // sIL M04; // Call GRES C Function // // inline VOID Change( WzASMH hHASH ) // { M02.Change( hHASH ); } //}; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // sIL_CALL_RC // - ÀÌÀü °á°ú°ª EAX¸¦ ÀÎÀÚ·Î ¹Þ¾ÆµéÀδÙ. // - °á°ú°ª EAX°ªÀº À¯ÁöÇÏÁö ¸øÇÑ´Ù. // // // (_INPUTARG) // REF = FIND_GRES_HASH(_HASH) // ERP = (REF)( POP() ); template struct sIL_CALL_RC { _INPUTARG M01; // ÇÔ¼öÈ£Ã⠽à ÀÎÀÚ·Î ³ÖÀ» °ª sIL M02; // Find Base Function by HASH sDTH<_HASHCODE> M03; // HASHCODE sIL M04; // Call GRES C Function inline VOID Change( WzASMH hHASH ) { M02.Change( hHASH ); } }; // //struct sIL_FAST_CALL_RC //{ // sIL M01; // Find Base Function by EAX // sIL M02; // Call GRES C Function //}; // ////¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ //// ÀÌÀü °á°ú°ª EAX¸¦ ÀÎÀÚ·Î ¹Þ¾ÆµéÀδÙ. //// °á°ú°ª EAX°ªÀº À¯ÁöÇÏÁö ¸øÇÑ´Ù. //template //struct sIL_CALL_RD //{ // sIL M01; // Find Base Function by HASH // sDT M02; // HASHCODE // sIL M03; // Call GRES D Function // // inline VOID Change( WzASMH hHASH ) // { M02.Change( hHASH ); } //}; // //struct sIL_FAST_CALL_RD //{ // sIL M01; // Find Base Function by EAX // sIL M02; // Call GRES C Function //}; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // À̰ÍÀº HASH·Î µî·ÏµÈ ÇÔ¼ö »Ó¸¸ ¾Æ´Ï¶ó Á÷Á¢ ¸Þ¸ð¸® Æ÷ÀÎÅ͸¦ ÀÔ·ÂÇØ¼­ // »ç¿ëÇϹǷΠHASH¿¡ µî·ÏµÈ ÇÔ¼ö°¡ ¾Æ´Ï´õ¶óµµ È£ÃâÀÌ °¡´ÉÇÏ´Ù. struct sIL_CALL_IBF_PTR_MAKE_ARGS { sIL_CLRA_EAX M01_CLRA_EAX; struct sINTER_make_arguments { sIL_MOV_EAX0_PTR M01_EIP_OBJ; sIL_MOV_EAX1_PTR M02_ARG1_CMDPTR; // { 0, (ARG1*), 0, 0 } sIL_MOV_EAX2_B2<0> M03_ARG2_VAL; // { 0, (ARG1*), (ARG2), 0 } } M02_make_arguments; sIL M04_INPUTARG; // Input ARG sIL_CALL_IBF_PTR M05_CALL_IBF_HANDLER; inline VOID ChangeARG( BYTE* IN pCMDSTREAM, WORD wSIZE ) { M02_make_arguments.M02_ARG1_CMDPTR.ChangeVAL( pCMDSTREAM ); M02_make_arguments.M03_ARG2_VAL.ChangeVAL( wSIZE ); } inline VOID RegisterIBF( HandlerIBF fnIBF ) { M05_CALL_IBF_HANDLER.Change( fnIBF ); } inline VOID RegisterEIP( WzASM_EIP* pEIP ) { //uREG_NODE& rNODE = *(uREG_NODE*)&M01.M02_ARG0; //rNODE.PTR = pEIP; M02_make_arguments.M01_EIP_OBJ.ChangeVAL( (WzPTR)pEIP ); }; }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // À̰ÍÀº µ¶¸³µÈ ÇÔ¼ö - ±¸ºÐ ¹æ¹ý (sIL_RET°¡ Á¸ÀçÇÏ´Â °æ¿ì) struct sMETHOD_CALL_IBF_PTR { sIL M01; sIL_CALL_IBF_PTR_MAKE_ARGS M02; sIL M03; sIL_RET M04; inline VOID ChangeARG( BYTE* IN pCMDSTREAM, WORD wSIZE ) { M02.ChangeARG( pCMDSTREAM, wSIZE ); } inline VOID RegisterIBF( HandlerIBF fnIBF ) { M02.RegisterIBF( fnIBF ); } inline VOID RegisterEIP( WzASM_EIP* pEIP ) { M02.RegisterEIP( pEIP ); }; }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // //{ // sUREG_NODE uArg0( NULL, _ALLOC_SZ ); // BYTE* pPTR = HandlerIBF_(malloc)(&uArg0.NODE); // sUREG_NODE uArg1( NULL, pPTR, _ALLOC_SZ ); // HandlerIBF_(ZeroMemory)( &uArg1.NODE ); // return pPTR; //} template struct sMETHOD_ALLOCnCLEAR_MEMORY_BASE { sIL M01; sIL_MOV_EAX_EXA2B4<0, 0> M02; sIL_MOV_EAX1_B2<_ALLOC_SZ> M03; // ¿©±â±îÁö°¡ Æ÷¸Ë ¸¸µç °Í sIL_MOV_EBX_EAX M04; // Àӽà ÀúÀå sIL M05; _DECLTYPE1 M06; sIL_MOV_EAX_EBX M07; // µ¥ÀÌÅÍ º¹¿ø sIL M08; // Æ÷¸Ë ÀçÁ¤·Ä sIL M09; // °á°ú°ªÀÎ Æ÷ÀÎÅÍ ÇÒ´ç sIL M10; _DECLTYPE2 M11; sIL M12; sIL M13; sIL_RET M14; inline VOID RegisterEIP( WzASM_EIP* pEIP ) { uREG_NODE& rNODE = *(uREG_NODE*)&M02.M02_ARG0; rNODE.PTR = pEIP; }; inline VOID ChangeSize( WORD wSIZE ) { M03.ChangeVAL( wSIZE ); } }; template struct sMETHOD_ALLOCnCLEAR_MEMORY_PTR : sMETHOD_ALLOCnCLEAR_MEMORY_BASE< sIL_CALL_IBF_PTR, sIL_CALL_IBF_PTR, _ALLOC_SZ > { sMETHOD_ALLOCnCLEAR_MEMORY_PTR() { M06.Change( FNPTR_IBF_HANDLER(malloc) ); M11.Change( FNPTR_IBF_HANDLER(ZeroMemory) ); } }; template struct sMETHOD_ALLOCnCLEAR_MEMORY_HASH : sMETHOD_ALLOCnCLEAR_MEMORY_BASE< sIL_CALL_IBF_HASH, sIL_CALL_IBF_HASH, _ALLOC_SZ > { }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // ÇÒ´çµÈ ¸Þ¸ð¸®¸¦ µî·ÏµÈ IBFÇڵ鷯ÀÇ ÀÎÀÚ·Î ³Ñ°ÜÁØ´Ù. // // ÇÒ´çµÈ ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÏ´Â ·çƾÀº Á¸ÀçÇÏÁö ¾Ê´Â´Ù. Áï, IBFÇڵ鷯¿¡¼­ ÇØÁ¦ // ½ÃŰ°Å³ª ERP°ªÀ¸·Î Áö¿øÇØ¾ß ÇÒ °ÍÀÌ´Ù. // // // // BYTE* pPTR = malloc(_ALLOC_SZ); // ZeroMemory( pPTR, _ALLOC_SZ ); // sUREG_NODE uArg( WzASM_EIP*, pPTR, _ALLOC_SZ ); // HandlerIBF_(REGISTERED)( &uArg.NODE ); // template struct sMETHOD_CALL_WITH_ALLOCEDMEMORY_BASE { sIL M01; sIL_MOV_EAX_EXA2B1<0, 0> M02; sIL_MOV_EAX1_B2<_ALLOC_SZ> M03; // ¿©±â±îÁö°¡ Æ÷¸Ë ¸¸µç °Í sIL M04; // Àӽà ÀúÀå (Æ÷¸Ë) sIL M05; // IBF ÀÎÀÚ _DECLTYPE1 M06; // ALLOCnCLEAR_MEMORY( NULL, [SZ] ) sIL M07; // µ¥ÀÌÅÍ º¹¿ø (Æ÷¸Ë) sIL M08; // [EIP*], [(SZ)], [SZ] sIL M09; // [EIP*], [PTR], [SZ] °á°ú°ªÀÎ Æ÷ÀÎÅÍ ÇÒ´ç sIL M10; // IBF ÀÎÀÚ sIL_CALL_IBF_PTR M11; // RegisterIBFHandler (ÇØ´ç Æ÷ÀÎÅÍ¿¡ new & cmd execute) sIL M12; sIL_RET M13; sMETHOD_CALL_WITH_ALLOCEDMEMORY_BASE() {}; inline VOID Register( WzASM_EIP* pEIP, HandlerIBF fnPTR ) { //uREG_NODE& rNODE = *(uREG_NODE*)&M02.M02; //rNODE.PTR = pEIP; M11.Change( fnPTR ); }; inline VOID ChangeSize( WORD wSIZE ) { M03.Change( wSIZE ); } }; ////////////////////////////////////////////////////////////////////////// // // sMETHOD_CALL_WITH_ALLOCEDMEMORY_BASE + POINTER IBF HANDLER µî·Ï template struct sMETHOD_CALL_WITH_ALLOCEDMEMORY_PTR : public sMETHOD_CALL_WITH_ALLOCEDMEMORY_BASE< sIL_CALL_IBF_PTR, _ALLOC_SZ > { sMETHOD_CALL_WITH_ALLOCEDMEMORY_PTR() { M06.Change( FNPTR_IBF_HANDLER(ALLOCnCLEAR_MEMORY) ); }; }; ////////////////////////////////////////////////////////////////////////// // // sMETHOD_CALL_WITH_ALLOCEDMEMORY_BASE + HASH IBF HANDLER µî·Ï template struct sMETHOD_CALL_WITH_ALLOCEDMEMORY_HASH : public sMETHOD_CALL_WITH_ALLOCEDMEMORY_BASE< sIL_CALL_IBF_HASH, _ALLOC_SZ > { }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // ÁÖ¾îÁø ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÑ´Ù. // [EIP*], [PTR] // À̰ÍÀ» È£Ãâ Çϱâ Àü // uNODE.EXA[sARG::ARG1]¿¡ ÁÖ¾îÁø °ªÀÌ Á¸ÀçÇØ¾ß ÇÑ´Ù. // // // uREG_NODE uNODE; // uNODE.EXA[sARG::ARG1].PTR = (freeing ptr); // free( uNODE.EXA[sARG::ARG1].PTR ) // template struct sIL_WzEIP_CALL_WITH_FREE_BASE { _LDEAXCMD M01; // EAX[1]¿¡ ÇØÁ¦ÇÒ Æ÷ÀÎÅÍ Á¸ÀçÇÏ´Â ÇüÅ·Πº¯Çü sIL M02; // Àӽà ÀúÀå (Æ÷¸Ë) sIL_CALL_IBF_HASH M03; // IBF_free( NULL, [PTR] ) -> ERP[0]´Â ¹«°ü }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // // // MEMBER* pMEMBER = &((OBJECT*)->MEMBER(by _OFFSET)); // // EAX = (OBJECT*) // EOP[0] = EAX; // EOP[1] = sCALC( _OFFSET, ADD ) // EAX = EOP[0] + EOP[1] // // // EAX = { ~, pMEMBER, ~ } // EOP = { OBJECT*, sCALC(OBJECT, MEMBER) } // template struct sIL_GET_OFFSET_PTR { sIL M01; // EOP = EAX sIL M02; // EOP[1] = NEXT-B4(sCALC) sDT_CALC<_OFFSET, cOFF::ADD> M03_OFFSET; // -(P)-sCALC(DT,OP) sIL M04; // EAX = EOP + -(P)- // ÀÌ¹Ì ÇÒ´çµÈ °´Ã¼ÀÇ ¿É¼Â°è»ê µ¥ÀÌÅÍ º¯°æ inline VOID ChangeOFFSETofPTR( WORD wOffset, cOFF::eOP eCMD ) { M03_OFFSET.CALC.DT = wOffset; M03_OFFSET.CALC.OP = eCMD; } }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // // // MEMBER* pMEMBER = &((OBJECT*)->MEMBER(by _OFFSET)); // // EAX = (OBJECT*) // EOP[0] = EAX; // EOP[1] = sCALC( _OFFSET, ADD ) // EAX = EOP[0] + EOP[1] // // // EAX = { pMEMBER, ~ } // EOP = { OBJECT*, sCALC(OBJECT, MEMBER) } // template struct sIL_GET_OFFSET_PTR_ON_ROOT { sIL_MOV_EAX_PTR<_ROOTPTR> M01; sIL_GET_OFFSET_PTR<_OFFSET> M02_OFFSET; // ±âÁØ EOP°ª º¯°æ inline VOID ChangeBaseObject( WzPTR pPTR ) { M01.ChangeVAL( pPTR ); } // ÀÌ¹Ì ÇÒ´çµÈ °´Ã¼ÀÇ ¿É¼Â°è»ê µ¥ÀÌÅÍ º¯°æ inline VOID ChangeOFFSETofPTR( WORD wOffset, cOFF::eOP eCMD ) { M02_OFFSET.ChangeOFFSETofPTR( wOffset, eCMD ); } }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // // // MEMBER* pMEMBER = &((OBJECT*)->MEMBER(by _OFFSET)); // BOOL bCHECK = CALL_HANDLER( 0, pMEMBER, 0, 0 ); // if( bCHECK ) // { º°µµ ÄÚµå Áö¿ø ÇÊ¿ä } // else // goto _JMPFAILCASE; // // // // EAX = { ~, pMEMBER, ~ } // EOP = { OBJECT*, sCALC(OBJECT, MEMBER) } // ERP = bCHECK // EFL // template struct sIL_CHECK_BOOL { sIL_GET_OFFSET_PTR_ON_ROOT M01; sIL M02; sIL_CALL_IBF_HASH_USRINPUT, _IBF_HASH> M04_CHECK_BOOL; sIL_IF_THEN_ELSE_IS_ZERO M09; // ±âÁØ EOP°ª º¯°æ inline VOID ChangeBaseObject( WzPTR pPTR ) { M01.ChangeBaseObject( pPTR ); } // ÀÌ¹Ì ÇÒ´çµÈ °´Ã¼ÀÇ ¿É¼Â°è»ê µ¥ÀÌÅÍ º¯°æ inline VOID ChangeOFFSETofPTR( WORD wOffset, cOFF::eOP eCMD ) { M01.ChangeOFFSETofPTR( wOffset, eCMD ); } // [?][PTR] - Çü½ÄÀÇ IBF inline VOID ChangeCompareRoutine( WzASM_IBF_HASH_T wHASH_IBF ) { M04_CHECK_BOOL.ChangeHASH( wHASH_IBF ); } }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // // // --PUSH GPR-- // MEMBER* pMEMBER = &((OBJECT*)->(_OFFSET MEMBER)); // BOOL bCHECK = CALL_HANDLER( 0, pMEMBER, 0, 0 ); // if( bCHECK ) // { // EAX = { ~, pMEMBER, _INTERVAL, ~ } // CALL_HANDLER( EAX ); // --POP GPR-- // return TRUE; // } // //if( !bCHECK ) goto _JMPFAILCASE; // _JMPFAILCASE: // --POP GPR-- // return FALSE; // // // EAX = { ~, pMEMBER, _INTERVAL, ~ } // EOP = { OBJECT*, sCALC(OBJECT, MEMBER) } // ERP = bCHECK // EFL // template struct sMETHOD_INTERVAL_WORKNODE_CODES { sIL M01; // STK(n) sIL_CHECK_BOOL<_CHK_IBF_HASH, _OFFSET, OPT::MARK01> M02; // Á¶°Ç ¸¸Á·½Ã (½Ã°£ÀÌ µÇ¾úÀ» ¶§...) // (ITimeout*)->SetNextTimeoutCurTickBased( Pop() ); //sIL_CALL_IBF_HASH_USRINPUT, _ACT_IBF_HASH> M04_if_is_true_than_call_IBF_handler struct sINTER_if_is_true_than_call_IBF_handler { sIL_MOV_EAX2_B2<_INTERVAL> M01; sIL_CALL_IBF_HASH_USRINPUT, _ACT_IBF_HASH> M02; } M04_if_is_true_than_call_IBF_handler; // User Code Block _USRCODE M06; // °á°úó¸® (TRUE) // EBX = TRUE; // ERP = EBX struct sINTER_make_return_true_result { sIL M01; sDT1 M02; sIL M03; } M09; sIL_MARK01 M10; sIL M11; sIL_RET M12; inline VOID ChangeBaseObject( WzPTR pPTR ) { M02.ChangeBaseObject( pPTR ); } inline VOID Change_if_is_true_than_call_IBF_handler( WzASM_IBF_HASH_T wHASH_IBF ) { M04_if_is_true_than_call_IBF_handler.M02.ChangeHASH( wHASH_IBF ); } }; #pragma pop_macro("STATIC") #pragma pop_macro("CONST") #pragma pop_macro("INLINE") #pragma pack(pop)