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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dsasm_functions.cpp

?? C語言編寫的反匯編工具
?? CPP
?? 第 1 頁 / 共 5 頁
字號:

#include "Disasm.h"

// x86 Registers
char *regs[3][9] = {
    { "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh"  }, // 8Bit
    { "ax", "cx", "dx", "bx", "sp", "bp", "si", "di"  }, // 16Bit
    { "eax","ecx","edx","ebx","esp","ebp","esi","edi" }  // 32bit
	//{ "eeax","eecx","eedx","eebx","eesp","eebp","eesi",eedi"
};

// x86 Data Size
const char *regSize[10]              = { "Qword","Dword","Word","Byte","Fword","TByte","(28)Byte","(108)Byte","DQword", "(512)Byte" }; // Registers Size of addressing

// x86 Segments
const char *segs[8]                  = { "ES","CS","SS","DS","FS","GS","SEG?","SEG?"}; // Segments

// x86 SIB
const char *Scale[5]                 = { "-","+","*2+","*4+","*8+" };     // Scale in SIB

// 16Bit Addressing
const char *addr16[8]                = { "BX+SI","BX+DI","BP+SI","BP+DI","SI","DI","BX","BP" }; // 16bit addressing

// x86 Instructions
const char *Instructions[8]          = { "add" , "or"  , "adc" ,    "sbb" , "and" , "sub"    , "xor" , "cmp"  }; // Basic      Repetive Assembly
const char *ArtimaticInstructions[8] = { "rol" , "ror" , "rcl" ,    "rcr" , "shl" , "shr"    , "sal" , "sar"  }; // Bitwise    Repetive Assembly
const char *InstructionsSet2[8]      = { "test", "test", "not" ,    "neg" , "mul" , "imul"   , "div" , "idiv" }; // Arithmatic Repetive Assembly (test is Twice -> long repetive set)
const char *InstructionsSet3[8]      = { "inc" , "dec" , "???" ,    "???" , "???" , "???"    , "???" , "???"  }; // Arithmatic Repetive Assebly (Opcode 0xFE)
const char *InstructionsSet4[8]      = { "inc" , "dec" , "call","call far", "jmp" , "jmp far", "push", "???"  }; // Arithmatic Repetive Assebly (Opcode 0xFE)

// FPU instructions
const char *FpuRegs[8]                      = { "st(0)", "st(1)", "st(2)", "st(3)" , "st(4)" , "st(5)" , "st(6)" , "st(7)"  }; // FPU Registers
const char *FpuInstructions[8]              = { "fadd" , "fmul" , "fcom" , "fcomp" , "fsub"  , "fsubr" , "fdiv"  , "fdivr"  }; // Unsigned fpu instructions
const char *FpuInstructionsSigned[8]        = { "fiadd", "fimul", "ficom", "ficomp", "fisub" , "fisubr", "fidiv" , "fidivr" }; // Signed fpu instructions
const char *FpuInstructionsSet2[8]          = { "fld"  , "???"  , "fst"  , "fstp"  , "fldenv", "fldcw" , "fstenv", "fstcw"  }; // set2 of Unsigned fpu instructions
const char *FpuInstructionsSet2Signed[8]    = { "fild" , "???"  , "fist" , "fistp" , "???"   , "fld"   , "???"   , "fstp"   }; // set2 of Signed fpu instructions
const char *FpuInstructionsSet3[8]          = { "fld"  , "???"  , "fst"  , "fstp"  , "frstor", "???"   , "fsave" , "fstsw"  }; // set3 of Unsigned fpu instructions
const char *FpuInstructionsSet2Signed_EX[8] = { "fild" , "???"  , "fist" , "fistp" , "fbld"  , "fild"  , "fbstp" , "fistp"  }; // set2 of Signed fpu instructions With Extended 2 instructions

// MMX, 3DNow! Registers
const char *Regs3DNow  [8]  = { "mm0"       , "mm1"       , "mm2"       , "mm3"       , "mm4"       , "mm5"     , "mm6"     , "mm7"    }; // 3DNow! Registers
const char *MMXRegs    [8]  = { "xmm0"      , "xmm1"      , "xmm2"      , "xmm3"      , "xmm4"      , "xmm5"    , "xmm6"    , "xmm7"   }; // MMX Registers

// MMX, 3DNow! (+extended), SSE , SSE2 Instructions
const char *NewSet     [8]  = { "sldt"      , "str"       , "lldt"      , "ltr"       , "verr"      , "verw"    , "???"     , "???"    }; // New Set1
const char *NewSet2    [8]  = { "sgdt"      , "sidt"      , "lgdt"      , "lidt"      , "smsw"      , "???"     , "lmsw"    , "invlpg" }; // New Set2
const char *NewSet3    [8]  = { "prefetchnta", "prefetcht0", "prefetcht1", "prefetcht2", "???"       , "???"     , "???"     , "???"    }; // New Set3
const char *NewSet4    [8]  = { "movaps"    , "movaps"    , "cvtpi2ps"  , "???"       , "cvttps2pi" , "cvtps2pi", "ucomiss" , "comiss" }; // New Set4
const char *NewSet5    [16] = { "cmovo"     , "cmovno"    , "cmovb"     , "cmovnb"    , "cmove"     , "cmovne"  , "cmovbe"  , "cmova"   , "cmovs"    , "cmovns"   , "cmovpe"     , "cmovpo"  , "cmovl"   , "cmovge" , "cmovle", "cmovg" }; // New Set5
const char *NewSet6    [16] = { "???"       , "sqrtps"    , "rsqrtps"   , "rcpps"     , "andps"     , "andnps"  , "orps"    , "xorps"   , "addps"    , "mulps"    , "???"        , "???"     , "subps"   , "minps"  , "divps" , "maxps" }; // New Set6
const char *NewSet6Ex  [16] = { "???"       , "sqrtss"    , "rsqrtss"   , "rcpss"     , "andps"     , "andnps"  , "orps"    , "xorps"   , "addss"    , "mulss"    , "???"        , "???"     , "subss"   , "minss"  , "divss" , "maxss" }; // New Set6 Extended (Prefix 0xF3)
const char *NewSet7    [16] = { "punpcklbw" , "punpcklwd" , "punpckldq" , "packsswb"  , "pcmpgtb"   , "pcmpgtw" , "pcmpgtd" , "packuswb", "punpckhbw", "punpckhwd", "punpckhdq"  , "packssdw", "???"     , "???"    , "movd"  , "movq"  }; // New Set7
const char *NewSet8    [8]  = { "pshufw"    , "???"       , "???"       , "???"       , "pcmpeqb"   , "pcmpeqw" , "pcmpeqd" , "emms" };                                                                                                    // New Set8
const char *NewSet9    [16] = { "seto"      , "setno"     , "setb"      , "setnb"     , "sete"      , "setne"   , "setbe"   , "seta"    , "sets"     , "setns"    , "setpe"      , "setpo"   , "setl"    , "setge"  , "setle" , "setg"  }; // New Set9
const char *NewSet10   [16] = { "push fs"   , "pop fs"    , "cpuid"     , "bt"        , "shld"      , "shld"    , "???"     , "???"     , "push gs"  , "pop gs"   , "rsm"        , "bts"     , "shrd"    , "shrd"   , "fxsave", "imul"  }; // New Set10
const char *NewSet10Ex [8]  = { "fxsave"    , "fxrstor"   , "ldmxcsr"   , "stmxcsr"   , "???"       , "???"     , "???"     , "???" };                                                                                                     // New Set10 Extended (Opcode 0xAE)
const char *NewSet11   [16] = { "cmpxchg"   , "cmpxchg"   , "lss"       , "btr"       , "lfs"       , "lgs"     , "movzx"   , "movzx"   , "???"      , "???"      , "???"        , "btc"     , "bsf"     , "bsr"    , "movsx" , "movsx" }; // New Set11
const char *NewSet12   [8]  = { "cmpeqps"   , "cmpltps"   , "cmpleps"   , "cmpunordps", "cmpneqps"  , "cmpnltps", "cmpnleps", "cmpordps" };                                                                                                // New Set12
const char *NewSet12Ex [8]  = { "cmpeqss"   , "cmpltss"   , "cmpless"   , "cmpunordss", "cmpneqss"  , "cmpnltss", "cmpnless", "cmpordss" };                                                                                                // New Set12 Extended (Prefix 0xF3)
const char *NewSet13   [16] = { "???"       , "psrlw"     , "psrld"     , "psrlq"     , "???"       , "pmullw"  , "???"     , "pmovmskb", "psubusb"  , "psubusw"  , "pminub"     , "pand"    , "paddusb" , "paddusw", "pmaxub", "pandn" }; // New Set13
const char *NewSet14   [16] = { "pavgb"     , "psraw"     , "psrad"     , "pavgw"     , "pmulhuw"   , "pmulhw"  , "???"     , "movntq"  , "psubsb"   , "psubsw"   , "pminsw"     , "por"     , "paddsb"  , "paddsw" , "pmaxsw", "pxor"  }; // New Set14
const char *NewSet15   [16] = { "???"       , "psllw"     , "pslld"     , "psllq"     , "???"       , "pmaddwd" , "psadbw"  , "maskmovq", "psubb"    , "psubw"    , "psubd"      , "???"     , "paddb"   , "paddw"  , "paddd" , "???"   }; // New Set15

// Debug/Control/Test Registers
const char *DebugRegs  [8]  = { "dr0"       , "dr1"       , "dr2"       , "dr3"       , "dr4"       , "dr5"     , "dr6"     , "dr7"    }; // Debug Registers
const char *ControlRegs[8]  = { "cr0"       , "cr1"       , "cr2"       , "cr3"       , "cr4"       , "cr5"     , "cr6"     , "cr7"    }; // Control Registers
//const char *TestRegs [8]  = { "tr0"       , "tr1"       , "tr2"       , "tr3"       , "tr4"       , "tr5"     , "tr6"     , "tr7"    }; // Test Registers

// =============================================//
//               Decoding Functions             //
// =============================================//

void Mod_11_RM(BYTE d, BYTE w,char **Opcode,DISASSEMBLY **Disasm,char instruction[],bool PrefixReg,BYTE Op,DWORD **index)
{
/* 
Function Mod_11_RM Checks whatever we have
Both bit d (direction) and bit w (full/partial size).

  There are 4 states:
  00 - d=0 / w=0 ; direction -> (ie: DH->DL),   partial size (AL,DH,BL..)
  01 - d=0 / w=1 ; direction -> (ie: EDX->EAX), partial size (EAX,EBP,EDI..)
  10 - d=1 / w=0 ; direction <- (ie: DH<-DL),   partial size (AL,DH,BL..)
  11 - d=1 / w=1 ; direction <- (ie: EDX<-EAX), partial size (EAX,EBP,EDI..)
  
	Also deals with harder opcodes which have diffrent
	Addresing type.
    */
	
    DWORD dwMem=0,dwOp=0;
	int RM,IndexAdd=1,m_OpcodeSize=2,Pos; // Register(s) Pointer
    WORD wMem=0,wOp=0;
	BYTE reg1=0,reg2=0,m_Opcode=0,REG;
    BYTE FOpcode;
	char assembly[50]="",temp[128]="",m_Bytes[128]="";
    
    Pos=(*(*index)); // Current Position
    
    m_Opcode = (BYTE)(*(*Opcode+Pos+1));// Decode registers from second byte
    
    // Strip Used Instructions / Used Segment
    REG=(BYTE)(*(*Opcode+Pos+1)); 
    REG>>=3;
	REG&=0x07;
	
    // Check Opcode range
    if((Op>=0x80 && Op<=0x83) || Op==0xC7 || Op==0x69)
    {    
        switch(Op) // Find Current Opcode
        {
            // Diffrent Opcodes ahs different Modes
			
		case 0x80: case 0x82: case 0x83:// 1 byte
            {
                RM=REG8;
                if(Op==0x83 && PrefixReg==0) // full size reg
                    RM=REG32;
				
				if(PrefixReg==1)
					RM=REG16;
				
                reg1=(m_Opcode&7); // Get Destination Register                
                SwapWord((BYTE*)(*Opcode+Pos+1),&wOp,&wMem);
                FOpcode=wOp&0x00FF;
                
                if(FOpcode>0x7F) // check for signed numbers!!
                {
                    FOpcode = 0x100-FOpcode; // -XX
                    wsprintf(temp,"%s%02X",Scale[0],FOpcode); // '-' aritmathic                    
				}
                else
                    wsprintf(temp,"%02X",FOpcode);
				
                // Read Opcodes: Opcode - imm8
                wsprintf(m_Bytes,"%02X%04X",Op,wOp);
				
                m_OpcodeSize=3;
                (*(*index))+=2; // Prepare to read next Instruction
            }
            break;
            
		case 0x81: case 0xC7: case 0x69: // 2 (WORD)/4 (DWORD) bytes
            {
                // 0x66 is being Used
                if(PrefixReg==1) // READ WORD
                {
                    RM=REG16;
                    reg1=(m_Opcode&0x07); // Get Destination Register
                    SwapWord((BYTE*)(*Opcode+Pos+2),&wOp,&wMem);
                    SwapDword((BYTE*)(*Opcode+Pos),&dwOp,&dwMem);
                    // Read imm16
                    wsprintf(temp,"%04X",wMem);                    
                    // Read Opcodes: Opcode - imm16
                    wsprintf(m_Bytes,"%08X",dwOp);                    
                    m_OpcodeSize=4; // Instruction Size
                    (*(*index))+=3;
                }
                else // READ DWORD
                {
                    RM=REG32;
                    reg1=(m_Opcode&0x07); // Get Destination Register                    
                    SwapDword((BYTE*)(*Opcode+Pos+2),&dwOp,&dwMem);
                    SwapWord((BYTE*)(*Opcode+Pos),&wOp,&wMem);
                    // Read Dword Data number (imm32)
                    wsprintf(temp,"%08X",dwMem);                    
                    // Read Opcodes: Opcode - imm32
                    wsprintf(m_Bytes,"%04X %08X",wOp,dwOp);
                    m_OpcodeSize=6; // Instruction Size
                    (*(*index))+=5;                    
                }                
            }
            break;
        }
        
        if(Op==0xC7)
        {
		/* 
		Instruction rule: Mem,Imm ->  1100011woo000mmm,imm
		Code Block: 1100011
		w = Reg Size
		oo - Mod
		000 - Must be!
		mmm - Reg/Mem
		imm - Immidiant (麼弳)
			*/
			
			if(((m_Opcode&0x38)>>3)!=0) // check 000
				lstrcat((*Disasm)->Remarks,"Invalid Instruction");
			
			wsprintf(assembly,"%s %s, %s","mov",regs[RM][reg1],temp);
        }
        else{        
            // Build assembly
            if(Op==0x69)
            {
                reg2=((m_Opcode&0x038)>>3);
                wsprintf(assembly,"imul %s, %s, %s",regs[RM][reg2],regs[RM][reg1],temp);
            }
            else
                wsprintf(assembly,"%s %s, %s",Instructions[REG],regs[RM][reg1],temp);
        }
        
        lstrcat((*Disasm)->Assembly,assembly);
        (*Disasm)->OpcodeSize=m_OpcodeSize;
        lstrcat((*Disasm)->Opcode,m_Bytes);
        return; // RET
        
    }
    else{ // Check Other Set of Opcodes        
        
        // Special Types usnig Segments
        if(Op==0x8C || Op==0x8E)
        {
            RM=REG16;
            reg1=(m_Opcode&0x07);
            SwapWord((BYTE*)(*Opcode+Pos),&wOp,&wMem);
            wsprintf(m_Bytes,"%04X",wOp);
            
            if(REG<=5) // SEG IS KNOWN
            {
                if(d==0) // (->) Direction
                {
                    wsprintf(assembly,"%s %s, %s",instruction,regs[RM][reg1],segs[REG]);
                }
                else // (<-) Direction
                {
                    wsprintf(assembly,"%s %s, %s",instruction,segs[REG],regs[RM][reg1]);
                }
            }
            else // UNKNOWN SEG (NOT IN RANGE 0-5)
            {
                if(d==0) // (->) Direction
                {                
                    wsprintf(assembly,"%s %s, SEG ??",instruction,regs[RM][reg1]);
                }
                else //(<-) Direction
                {
                    wsprintf(assembly,"%s SEG ??,%s",instruction,regs[RM][reg1]);
                }
				
                // Put warning
                lstrcat((*Disasm)->Remarks,"Unknown Segment Used,");
            }
            
            // Add data to the Struct
            (*Disasm)->OpcodeSize=2; // Instruction Size
            lstrcat((*Disasm)->Assembly,assembly);
            lstrcat((*Disasm)->Opcode,m_Bytes); 
            
            // Segment Modification Opcode ( MOV <SEG>, <REG>)
            if(Op==0x8E) 
                lstrcat((*Disasm)->Remarks,"Segment Is Being Modified!");
            
            (*(*index))++;
			
            return;
        }
		
		if(Op==0xC6)
		{
			RM=REG8;
			if(m_Opcode>=0xC0 && m_Opcode<=0xC7)
			{
				reg1=(m_Opcode&0x07); // Get Destination Register
				SwapWord((BYTE*)(*Opcode+Pos+1),&wOp,&wMem);
				// Read imm16
				wsprintf(temp,"%02X",*((BYTE*)(*Opcode+Pos+2)));
				wsprintf(m_Bytes,"C6 %04X",wOp);
				// Read Opcodes: Opcode - imm16                   
				m_OpcodeSize=3; // Instruction Size
				(*(*index))+=2;
				wsprintf(assembly,"%s %s, %s","mov",regs[RM][reg1],temp);
			}
			else
			{
				SwapWord((BYTE*)(*Opcode+Pos+1),&wOp,&wMem);
				wsprintf(m_Bytes,"C6 %04X",wOp);
				m_OpcodeSize=3;
				(*(*index))+=2;
				lstrcpy(assembly,"???");
			}
			lstrcat((*Disasm)->Assembly,assembly);
			(*Disasm)->OpcodeSize=m_OpcodeSize;
			lstrcat((*Disasm)->Opcode,m_Bytes);
			return;
		}
		
        // Mixed Instructions
        if(Op==0xC0 || Op==0xC1)
        {
            // Check register Size
            if(w==0) 
                RM=REG8;
            else
            {
                if(PrefixReg==1)
                    RM=REG16;
                else
                    RM=REG32;
            }       
			
            reg1=(m_Opcode&7); // Get Destination Register
            SwapWord((BYTE*)(*Opcode+Pos+1),&wOp,&wMem);
            wsprintf(temp,"%02X",wOp&0x00FF);            
            // Read Opcodes: Opcode - imm8
            wsprintf(m_Bytes,"%02X%04X",Op,wOp);
            m_OpcodeSize=3;
            (*(*index))+=2; // Prepare to read next Instruction
            // Build assembly
            wsprintf(assembly,"%s %s, %s",ArtimaticInstructions[REG],regs[RM][reg1],temp);
            lstrcat((*Disasm)->Assembly,assembly);
            (*Disasm)->OpcodeSize=m_OpcodeSize;
            lstrcat((*Disasm)->Opcode,m_Bytes);
            return; // exit the function
        }
		
        // XCHG Register
        if(Op>=0x91 && Op<=0x97) 
        {
            m_Opcode=(*(*Opcode+Pos)); // 1 byte Opcode
            m_Opcode+=0x30;            // Add 0x30 in order to get values of EAX-EDI (trick)
            IndexAdd=0;                // Dont Add to the index counter.
            m_OpcodeSize=1;            // 1 byte opcode          
        }
		
        // (->) / reg8
        if(d==0 && w==0)
        {    
            RM=REG8;
            reg1=(m_Opcode&0x07);
            reg2=(m_Opcode&0x38)>>3;
        }
        
        // (->) / reg32
        if(d==0 && w==1)
        {    
            RM=REG32;
            if(PrefixReg==1)
                RM=REG16; // (->) / reg16 (RegPerfix is being used)
			
            reg1=(m_Opcode&0x07);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区四区中文字幕| 国产欧美va欧美不卡在线 | 欧美另类高清zo欧美| 亚洲老司机在线| 在线精品视频一区二区三四 | 在线一区二区三区四区五区| 亚洲免费在线观看视频| 在线一区二区三区四区五区| 日韩中文字幕一区二区三区| 日韩美女视频在线| 国产福利不卡视频| 亚洲日本在线视频观看| 欧美日韩视频专区在线播放| 精品一区二区三区日韩| 欧美国产国产综合| 欧美三级韩国三级日本三斤| 麻豆精品在线视频| 亚洲国产高清在线| 欧美区在线观看| 国产一区91精品张津瑜| 国产精品久久久久婷婷二区次| 欧美日韩中文字幕一区| 精品一区二区三区香蕉蜜桃| 亚洲欧美在线高清| 91精品国产91久久综合桃花| 国产精品系列在线播放| 一区二区三区 在线观看视频| 91精品国产一区二区| 成人aaaa免费全部观看| 午夜av一区二区三区| 国产亚洲自拍一区| 欧美视频在线一区二区三区| 黑人巨大精品欧美黑白配亚洲| 最新国产成人在线观看| 日韩精品影音先锋| 色丁香久综合在线久综合在线观看| 日本aⅴ精品一区二区三区 | 91视视频在线观看入口直接观看www | 国产色婷婷亚洲99精品小说| 在线观看91视频| 高清av一区二区| 青青青伊人色综合久久| 亚洲免费三区一区二区| 精品少妇一区二区三区日产乱码| 91在线小视频| 国产在线视频一区二区三区| 亚洲va国产天堂va久久en| 国产精品久久久一本精品| 日韩欧美一区二区久久婷婷| 欧美丝袜第三区| 色综合久久久久综合体| 国产激情偷乱视频一区二区三区| 日韩和欧美的一区| 亚洲情趣在线观看| 亚洲国产成人在线| 久久久久国产精品人| 日韩精品在线一区| 日韩视频免费观看高清在线视频| 在线观看视频欧美| 91色|porny| 成人福利视频在线看| 国产福利一区二区三区视频在线 | 亚洲综合视频在线| 日韩毛片高清在线播放| 中文字幕一区在线| 国产精品三级视频| 国产日产欧美一区| 国产天堂亚洲国产碰碰| 久久久久高清精品| 久久精品免费在线观看| 国产日韩精品一区二区三区| 亚洲精品在线免费播放| 久久综合给合久久狠狠狠97色69| 日韩欧美国产一区二区在线播放| 欧美一区午夜精品| 91精品国产91久久久久久最新毛片 | 欧美视频在线播放| 欧洲一区二区三区在线| 欧美亚洲综合另类| 欧美日韩一级片网站| 欧美日韩一本到| 欧美日韩国产片| 91精品国产综合久久久久| 欧美高清一级片在线| 欧美一区二区视频观看视频| 日韩欧美区一区二| 久久女同互慰一区二区三区| 久久色在线视频| 亚洲国产精华液网站w| 国产精品精品国产色婷婷| 亚洲欧洲美洲综合色网| 夜夜操天天操亚洲| 肉肉av福利一精品导航| 日本在线观看不卡视频| 国产综合色在线视频区| 成人小视频免费观看| 91免费国产在线| 欧美精品1区2区3区| 久久亚洲精精品中文字幕早川悠里 | 国产成人av电影在线观看| 国产91综合网| 欧美性xxxxxxxx| 2023国产精华国产精品| 亚洲欧美偷拍卡通变态| 五月天亚洲精品| 韩国三级中文字幕hd久久精品| 国产精品中文字幕欧美| 欧洲在线/亚洲| 精品久久久久久久人人人人传媒 | 精品成人一区二区三区四区| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲一区在线观看免费| 九九精品视频在线看| 色综合久久综合网97色综合| 日韩色在线观看| 国产精品成人免费在线| 日韩av电影天堂| 成人avav在线| 日韩一区二区三区三四区视频在线观看| 久久久久久久综合色一本| 亚洲一区免费观看| 国产高清不卡一区| 欧美高清视频在线高清观看mv色露露十八| 国产午夜三级一区二区三| 亚洲永久免费av| 国产91精品久久久久久久网曝门 | 亚洲另类在线一区| 国产一区在线精品| 欧美狂野另类xxxxoooo| 亚洲欧洲精品天堂一级| 麻豆成人在线观看| 92精品国产成人观看免费| 久久久久久99久久久精品网站| 午夜久久久久久| 99国产精品国产精品久久| 精品久久久久久无| 婷婷丁香久久五月婷婷| 99国产精品久| 国产午夜精品美女毛片视频| 日韩高清不卡在线| 在线观看一区二区视频| 中文字幕永久在线不卡| 国产成人亚洲综合色影视| 日韩精品自拍偷拍| 亚洲一区二区综合| 一本大道久久a久久精二百 | 亚洲欧美日韩国产成人精品影院 | 一本大道av伊人久久综合| 国产婷婷一区二区| 精品一区二区日韩| 91精品国产91久久久久久一区二区 | 国产午夜亚洲精品午夜鲁丝片| 蜜臀91精品一区二区三区| 欧美猛男gaygay网站| 亚洲免费看黄网站| 94色蜜桃网一区二区三区| 国产精品短视频| 不卡区在线中文字幕| 国产精品精品国产色婷婷| 风间由美性色一区二区三区| 国产日韩欧美综合在线| 国产精品一区专区| 国产色婷婷亚洲99精品小说| 国产乱码精品1区2区3区| 久久久91精品国产一区二区精品| 久久精品国产999大香线蕉| 日韩色视频在线观看| 秋霞av亚洲一区二区三| 日韩一区二区三区四区 | 日韩欧美一级二级三级久久久| 青娱乐精品在线视频| 精品欧美久久久| 国产一区二区看久久| 欧美经典一区二区| 成人一区二区三区视频在线观看| 欧美国产日产图区| 99视频国产精品| 夜夜揉揉日日人人青青一国产精品| 在线视频你懂得一区| 亚洲成人av在线电影| 91精品国产欧美一区二区成人| 久久精品国产一区二区三| 26uuu久久综合| 成人动漫一区二区在线| 亚洲激情五月婷婷| 欧美一卡2卡3卡4卡| 国产一区二区三区免费看| 欧美国产丝袜视频| 在线观看日韩高清av| 日本强好片久久久久久aaa| 久久免费偷拍视频| 本田岬高潮一区二区三区| 亚洲制服丝袜一区| 欧美不卡激情三级在线观看| 盗摄精品av一区二区三区| 亚洲蜜臀av乱码久久精品| 7777精品伊人久久久大香线蕉完整版| 看电影不卡的网站| 中文字幕在线观看不卡| 欧美精三区欧美精三区|