亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 開(kāi)發(fā) > PHP > 正文

PHP內(nèi)核學(xué)習(xí)教程之php opcode內(nèi)核實(shí)現(xiàn)

2024-05-04 23:42:37
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
opcode是計(jì)算機(jī)指令中的一部分,用于指定要執(zhí)行的操作, 指令的格式和規(guī)范由處理器的指令規(guī)范指定,通過(guò)本文給大家介紹PHP內(nèi)核學(xué)習(xí)教程之php opcode內(nèi)核實(shí)現(xiàn),感興趣的朋友一起學(xué)習(xí)吧
 

opcode是計(jì)算機(jī)指令中的一部分,用于指定要執(zhí)行的操作, 指令的格式和規(guī)范由處理器的指令規(guī)范指定。 除了指令本身以外通常還有指令所需要的操作數(shù),可能有的指令不需要顯式的操作數(shù)。 這些操作數(shù)可能是寄存器中的值,堆棧中的值,某塊內(nèi)存的值或者IO端口中的值等等。

通常opcode還有另一種稱謂:字節(jié)碼(byte codes)。 例如Java虛擬機(jī)(JVM),.NET的通用中間語(yǔ)言(CIL: Common Intermeditate Language)等等。

1. Opcode簡(jiǎn)介

opcode是計(jì)算機(jī)指令中的一部分,用于指定要執(zhí)行的操作, 指令的格式和規(guī)范由處理器的指令規(guī)范指定。 除了指令本身以外通常還有指令所需要的操作數(shù),可能有的指令不需要顯式的操作數(shù)。 這些操作數(shù)可能是寄存器中的值,堆棧中的值,某塊內(nèi)存的值或者IO端口中的值等等 

通常opcode還有另一種稱謂: 字節(jié)碼(byte codes)。 例如Java虛擬機(jī)(JVM),.NET的通用中間語(yǔ)言(CIL: Common Intermeditate Language)等等 

PHP中的opcode則屬于前面介紹中的后著,PHP是構(gòu)建在Zend虛擬機(jī)(Zend VM)之上的。PHP的opcode就是Zend虛擬機(jī)中的指令(基于Zend的中間代碼)

Relevant Link:

http://www.luocong.com/learningopcode/doc/1._%E4%BB%80%E4%B9%88%E6%98%AFOpCode%EF%BC%9F.htm

2. PHP中的Opcode

0x1: 數(shù)據(jù)結(jié)構(gòu)

在PHP實(shí)現(xiàn)內(nèi)部,opcode由如下的結(jié)構(gòu)體表示

/php-5.6.17/Zend/zend_compile.h

struct _zend_op {opcode_handler_t handler; // 執(zhí)行該opcode時(shí)調(diào)用的處理函數(shù)znode_op op1; // opcode所操作的操作數(shù)znode_op op2; // opcode所操作的操作數(shù)znode_op result;ulong extended_value;uint lineno;zend_uchar opcode; // opcode代碼zend_uchar op1_type;zend_uchar op2_type;zend_uchar result_type;}; 

和CPU的指令類似,有一個(gè)標(biāo)示指令的opcode字段,以及這個(gè)opcode所操作的操作數(shù),PHP不像匯編那么底層, 在腳本實(shí)際執(zhí)行的時(shí)候可能還需要其他更多的信息,extended_value字段就保存了這類信息, 其中的result域則是保存該指令執(zhí)行完成后的結(jié)果

例如如下代碼是在編譯器遇到print語(yǔ)句的時(shí)候進(jìn)行編譯的函數(shù)

/php-5.6.17/Zend/zend_compile.c

void zend_do_print(znode *result, const znode *arg TSRMLS_DC) /* {{{ */{ //新創(chuàng)建一條zend_op zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);//將新建的zend_op的返回值類型設(shè)置為臨時(shí)變量(IS_TMP_VAR),因?yàn)閜rint中的內(nèi)存僅僅為了臨時(shí)輸出,并不需要保存opline->result_type = IS_TMP_VAR;//為臨時(shí)變量申請(qǐng)空間opline->result.var = get_temporary_variable(CG(active_op_array));//指定opcode為ZEND_PRINTopline->opcode = ZEND_PRINT;//將傳遞進(jìn)來(lái)的參數(shù)賦值給這條opcode的第一個(gè)操作數(shù)SET_NODE(opline->op1, arg);SET_UNUSED(opline->op2);GET_NODE(result, opline->result);}

 

0x2: opcode類型: zend_op->zend_uchar opcode

比對(duì)匯編語(yǔ)言的概念,每個(gè)opcode都對(duì)應(yīng)于一個(gè)類型,表明該opcpde的"操作指令",opcode的類型為zend_uchar,zend_uchar實(shí)際上就是unsigned char,此字段保存的整形值即為op的編號(hào),用來(lái)區(qū)分不同的op類型,opcode的可取值都被定義成了宏

/Zend/zend_vm_opcodes.h

#define ZEND_NOP 0#define ZEND_ADD 1#define ZEND_SUB 2#define ZEND_MUL 3#define ZEND_DIV 4#define ZEND_MOD 5#define ZEND_SL 6#define ZEND_SR 7#define ZEND_CONCAT 8#define ZEND_BW_OR 9#define ZEND_BW_AND 10#define ZEND_BW_XOR 11#define ZEND_BW_NOT 12#define ZEND_BOOL_NOT 13#define ZEND_BOOL_XOR 14#define ZEND_IS_IDENTICAL 15#define ZEND_IS_NOT_IDENTICAL 16#define ZEND_IS_EQUAL 17#define ZEND_IS_NOT_EQUAL 18#define ZEND_IS_SMALLER 19#define ZEND_IS_SMALLER_OR_EQUAL 20#define ZEND_CAST 21#define ZEND_QM_ASSIGN 22#define ZEND_ASSIGN_ADD 23#define ZEND_ASSIGN_SUB 24#define ZEND_ASSIGN_MUL 25#define ZEND_ASSIGN_DIV 26#define ZEND_ASSIGN_MOD 27#define ZEND_ASSIGN_SL 28#define ZEND_ASSIGN_SR 29#define ZEND_ASSIGN_CONCAT 30#define ZEND_ASSIGN_BW_OR 31#define ZEND_ASSIGN_BW_AND 32#define ZEND_ASSIGN_BW_XOR 33#define ZEND_PRE_INC 34#define ZEND_PRE_DEC 35#define ZEND_POST_INC 36#define ZEND_POST_DEC 37#define ZEND_ASSIGN 38#define ZEND_ASSIGN_REF 39#define ZEND_ECHO 40#define ZEND_PRINT 41#define ZEND_JMP 42#define ZEND_JMPZ 43#define ZEND_JMPNZ 44#define ZEND_JMPZNZ 45#define ZEND_JMPZ_EX 46#define ZEND_JMPNZ_EX 47#define ZEND_CASE 48#define ZEND_SWITCH_FREE 49#define ZEND_BRK 50#define ZEND_CONT 51#define ZEND_BOOL 52#define ZEND_INIT_STRING 53#define ZEND_ADD_CHAR 54#define ZEND_ADD_STRING 55#define ZEND_ADD_VAR 56#define ZEND_BEGIN_SILENCE 57#define ZEND_END_SILENCE 58#define ZEND_INIT_FCALL_BY_NAME 59#define ZEND_DO_FCALL 60#define ZEND_DO_FCALL_BY_NAME 61#define ZEND_RETURN 62#define ZEND_RECV 63#define ZEND_RECV_INIT 64#define ZEND_SEND_VAL 65#define ZEND_SEND_VAR 66#define ZEND_SEND_REF 67#define ZEND_NEW 68#define ZEND_INIT_NS_FCALL_BY_NAME 69#define ZEND_FREE 70#define ZEND_INIT_ARRAY 71#define ZEND_ADD_ARRAY_ELEMENT 72#define ZEND_INCLUDE_OR_EVAL 73#define ZEND_UNSET_VAR 74#define ZEND_UNSET_DIM 75#define ZEND_UNSET_OBJ 76#define ZEND_FE_RESET 77#define ZEND_FE_FETCH 78#define ZEND_EXIT 79#define ZEND_FETCH_R 80#define ZEND_FETCH_DIM_R 81#define ZEND_FETCH_OBJ_R 82#define ZEND_FETCH_W 83#define ZEND_FETCH_DIM_W 84#define ZEND_FETCH_OBJ_W 85#define ZEND_FETCH_RW 86#define ZEND_FETCH_DIM_RW 87#define ZEND_FETCH_OBJ_RW 88#define ZEND_FETCH_IS 89#define ZEND_FETCH_DIM_IS 90#define ZEND_FETCH_OBJ_IS 91#define ZEND_FETCH_FUNC_ARG 92#define ZEND_FETCH_DIM_FUNC_ARG 93#define ZEND_FETCH_OBJ_FUNC_ARG 94#define ZEND_FETCH_UNSET 95#define ZEND_FETCH_DIM_UNSET 96#define ZEND_FETCH_OBJ_UNSET 97#define ZEND_FETCH_DIM_TMP_VAR 98#define ZEND_FETCH_CONSTANT 99#define ZEND_GOTO 100#define ZEND_EXT_STMT 101#define ZEND_EXT_FCALL_BEGIN 102#define ZEND_EXT_FCALL_END 103#define ZEND_EXT_NOP 104#define ZEND_TICKS 105#define ZEND_SEND_VAR_NO_REF 106#define ZEND_CATCH 107#define ZEND_THROW 108#define ZEND_FETCH_CLASS 109#define ZEND_CLONE 110#define ZEND_RETURN_BY_REF 111#define ZEND_INIT_METHOD_CALL 112#define ZEND_INIT_STATIC_METHOD_CALL 113#define ZEND_ISSET_ISEMPTY_VAR 114#define ZEND_ISSET_ISEMPTY_DIM_OBJ 115#define ZEND_PRE_INC_OBJ 132#define ZEND_PRE_DEC_OBJ 133#define ZEND_POST_INC_OBJ 134#define ZEND_POST_DEC_OBJ 135#define ZEND_ASSIGN_OBJ 136#define ZEND_INSTANCEOF 138#define ZEND_DECLARE_CLASS 139#define ZEND_DECLARE_INHERITED_CLASS 140#define ZEND_DECLARE_FUNCTION 141#define ZEND_RAISE_ABSTRACT_ERROR 142#define ZEND_DECLARE_CONST 143#define ZEND_ADD_INTERFACE 144#define ZEND_DECLARE_INHERITED_CLASS_DELAYED 145#define ZEND_VERIFY_ABSTRACT_CLASS 146#define ZEND_ASSIGN_DIM 147#define ZEND_ISSET_ISEMPTY_PROP_OBJ 148#define ZEND_HANDLE_EXCEPTION 149#define ZEND_USER_OPCODE 150#define ZEND_JMP_SET 152#define ZEND_DECLARE_LAMBDA_FUNCTION 153#define ZEND_ADD_TRAIT 154#define ZEND_BIND_TRAITS 155#define ZEND_SEPARATE 156#define ZEND_QM_ASSIGN_VAR 157#define ZEND_JMP_SET_VAR 158#define ZEND_DISCARD_EXCEPTION 159#define ZEND_YIELD 160#define ZEND_GENERATOR_RETURN 161#define ZEND_FAST_CALL 162#define ZEND_FAST_RET 163#define ZEND_RECV_VARIADIC 164#define ZEND_SEND_UNPACK 165#define ZEND_POW 166#define ZEND_ASSIGN_POW 167 

0x3: opcode執(zhí)行句柄: zend_op->handler

op的執(zhí)行句柄,其類型為opcode_handler_t

typedef int (ZEND_FASTCALL *opcode_handler_t) (ZEND_OPCODE_HANDLER_ARGS); 
這個(gè)函數(shù)指針為op定義了執(zhí)行方式,每一種opcode字段都對(duì)應(yīng)一個(gè)種類的handler,比如如果$a = 1;這樣的代碼生成的op,操作數(shù)為const和cv,最后就能確定handler為函數(shù)ZEND_ASSIGN_SPEC_CV_CONST_HANDLER

/Zend/zend_vm_execute.h

void zend_init_opcodes_handlers(void){static const opcode_handler_t labels[] = {..ZEND_ASSIGN_SPEC_CV_CONST_HANDLER,..}}

0x4: opcpde操作數(shù)znode

操作數(shù)字段是_zend_op類型中比較重要的部分了,其中op1,op2,result三個(gè)操作數(shù)定義為znode類型 

/php-5.6.17/Zend/zend_compile.h

typedef struct _znode { /* used only during compilation *//*這個(gè)int類型的字段定義znode操作數(shù)的類型#define IS_CONST (1<<0) //表示常量,例如$a = 123; $b = "hello";這些代碼生成OP后,123和"hello"都是以常量類型操作數(shù)存在#define IS_TMP_VAR (1<<1) //表示臨時(shí)變量,臨時(shí)變量一般在前面加~來(lái)表示,這是一些OP執(zhí)行過(guò)程中需要用到的中間變量,例如初始化一個(gè)數(shù)組的時(shí)候,就需要一個(gè)臨時(shí)變量來(lái)暫時(shí)存儲(chǔ)數(shù)組zval,然后將數(shù)組賦值給變量#define IS_VAR (1<<2) //一般意義上的變量,以$開(kāi)發(fā)表示#define IS_UNUSED (1<<3) // Unused variable #define IS_CV (1<<4) // Compiled variable,這種類型的操作數(shù)比較重要,此類型是在PHP后來(lái)的版本中(大概5.1)中才出現(xiàn),CV的意思是compiled variable,即編譯后的變量,變量都是保存在一個(gè)符號(hào)表中,這個(gè)符號(hào)表是一個(gè)哈希表,如果每次讀寫(xiě)變量的時(shí)候都需要到哈希表中去檢索,會(huì)對(duì)效率有一定的影響,因此在執(zhí)行上下文環(huán)境中,會(huì)將一些編譯期間生成的變量緩存起來(lái)。此類型操作數(shù)一般以!開(kāi)頭表示,比如變量$a=123;$b="hello"這段代碼,$a和$b對(duì)應(yīng)的操作數(shù)可能就是!0和!1, 0和1相當(dāng)于一個(gè)索引號(hào),通過(guò)索引號(hào)從緩存中取得相應(yīng)的值*/int op_type;/*此字段為一個(gè)聯(lián)合體,根據(jù)op_type的不同,u取不同的值1. op_type=IS_CONST的時(shí)候,u中的constant保存的就是操作數(shù)對(duì)應(yīng)的zval結(jié)構(gòu)2. 例如$a=123時(shí),123這個(gè)操作數(shù)中,u中的constant是一個(gè)IS_LONG類型的zval,其值lval為123 */union {znode_op op;zval constant; /* replaced by literal/zv */zend_op_array *op_array;zend_ast *ast;} u;zend_uint EA; /* extended attributes */} znode; 

0x5: opcode編譯后數(shù)組op_array

在zend_do_print函數(shù)中的第一行,我們注意到下面這行代碼

zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC); 

PHP腳本代碼被編譯后產(chǎn)生的opcode保存在op_array中,其內(nèi)部存儲(chǔ)的結(jié)構(gòu)如下

/php-5.6.17/Zend/zend_compile.h

struct _zend_op_array {/* Common elements */zend_uchar type;const char *function_name; // 如果是用戶定義的函數(shù)則,這里將保存函數(shù)的名字zend_class_entry *scope;zend_uint fn_flags;union _zend_function *prototype;zend_uint num_args;zend_uint required_num_args;zend_arg_info *arg_info;/* END of common elements */zend_uint *refcount;zend_op *opcodes; // opcode數(shù)組zend_uint last;zend_compiled_variable *vars;int last_var;zend_uint T;zend_uint nested_calls;zend_uint used_stack;zend_brk_cont_element *brk_cont_array;int last_brk_cont;zend_try_catch_element *try_catch_array;int last_try_catch;zend_bool has_finally_block;/* static variables support */HashTable *static_variables;zend_uint this_var;const char *filename;zend_uint line_start;zend_uint line_end;const char *doc_comment;zend_uint doc_comment_len;zend_uint early_binding; /* the linked list of delayed declarations */zend_literal *literals;int last_literal;void **run_time_cache;int last_cache_slot;void *reserved[ZEND_MAX_RESERVED_RESOURCES];}; 

整個(gè)PHP腳本代碼被編譯后的opcodes保存在這里,在執(zhí)行的時(shí)候由下面的execute函數(shù)執(zhí)行

ZEND_API void execute(zend_op_array *op_array TSRMLS_DC){// ... 循環(huán)執(zhí)行op_array中的opcode或者執(zhí)行其他op_array中的opcode}

每條opcode都有一個(gè)opcode_handler_t的函數(shù)指針字段,用于執(zhí)行該opcode,PHP有三種方式來(lái)進(jìn)行opcode的處理

1. CALL: PHP默認(rèn)使用CALL的方式,也就是函數(shù)調(diào)用的方式
2. SWITCH: 由于opcode執(zhí)行是每個(gè)PHP程序頻繁需要進(jìn)行的操作,可以使用SWITCH或者GOTO的方式來(lái)分發(fā)
3. GOTO: 通常GOTO的效率相對(duì)會(huì)高一些,不過(guò)效率是否提高依賴于不同的CPU 
實(shí)際上我們會(huì)發(fā)現(xiàn),在/zend/zend_language_parser.c中就是Zend的opcode翻譯解釋執(zhí)行過(guò)程,其中包含了call、switch、goto三種opcode執(zhí)行方式

這就是PHP為什么稱之為解釋型語(yǔ)言的內(nèi)核原理,PHP在完成Lex詞法解析后,在語(yǔ)法解析即生成產(chǎn)生式的時(shí)候,直接通過(guò)call、switch、goto的方式調(diào)用zend api進(jìn)行即使解釋執(zhí)行

Relevant Link:

http://www.nowamagic.net/librarys/veda/detail/1325http://php.net/manual/zh/internals2.opcodes.list.phphttp://www.nowamagic.net/librarys/veda/detail/1543http://www.nowamagic.net/librarys/veda/detail/1324http://www.nowamagic.net/librarys/veda/detail/1543 http://www.laruence.com/2008/06/18/221.htmlhttp://www.php-internals.com/book/?p=chapt02/02-03-02-opcode 

3. opcode翻譯執(zhí)行(即時(shí)解釋執(zhí)行)

Relevant Link:

http://www.php-internals.com/book/?p=chapt02/02-03-03-from-opcode-to-handler

以上所述本文給大家介紹的PHP內(nèi)核學(xué)習(xí)教程之php opcode內(nèi)核實(shí)現(xiàn)的相關(guān)知識(shí),希望對(duì)大家有所幫助。



注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到PHP教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产一区二区三区高清播放| 337p粉嫩大胆噜噜噜噜噜91av| 日本免费看黄| 亚洲色图在线看| 黄色免费视频在线观看| 精品国产乱码久久久久久1区2匹| 激情久久免费视频| 一区二区三区在线免费播放| 欧美下载看逼逼| 欧美第一页草草影院浮力| 中文娱乐网av| 亚洲欧美在线免费观看| 国产亚洲精品熟女国产成人| 精品色蜜蜜精品视频在线观看| 青青国产91久久久久久| 日韩在线视频免费| 午夜神马福利影院| 亚洲精品久久久久久久久久久久| 51午夜精品国产| 久久久女女女女999久久| 精品欧美日韩精品| 精品国产av色一区二区深夜久久| 亚洲国产精品久久久久秋霞蜜臀| 国产高清精品软件丝瓜软件| 国产精品亚洲成在人线| 99热国内精品| 国产人成视频在线观看| 性欧美高清come| 欧美在线看片| 久久天天躁夜夜躁狠狠躁2022| 99久久视频| 欧美变态xxxx| 久久久久久久久久久影视| 久久免费电影| 欧美另类高清zo欧美| 国产在线欧美日韩| 美国三级日本三级久久99| 午夜在线观看91| 老司机凹凸av亚洲导航| 精品亚洲国内自在自线福利| 日韩精品视频三区| 最新黄色片网站| 好吊视频在线观看| 狠狠操视频网| 国产精品午夜在线| 日本三级欧美三级| 成人日韩av在线| 99久久国产综合精品色伊| 九色蝌蚪av新入口| 日韩精品久久久久久免费| 成人观看视频| 最近2019免费中文字幕视频三| xxxxxwwww免费视频| xxx成人少妇69| 天天草天天草| 牛牛影视精品影视| 精品日韩在线| 亚洲成人动漫一区| 国产一区二区三区久久悠悠色av| 欧美性猛交xxxx黑人猛交| 国产又大又黄的视频| 国产日韩网站| 九一国产精品| 又黄又免费的视频| 国产成人精彩在线视频九色| 国产日韩欧美精品一区二区三区| 国产精品区一区二区三在线播放| 青青草手机在线观看| 理论片鲁丝二区爱情网| 日韩精品电影在线观看| 欧美一级夜夜爽| 在线看视频你懂得| 日韩日韩日韩日韩日韩| 另类调教123区| 欧美日韩视频精品二区| 福利精品视频在线| 国产一区二区三区福利| 成人乱色短篇合集| 日韩美女视频免费在线观看| 成人在线视频免费观看| 在线观看xxxx| 色精品一区二区三区| 国产网站免费观看| 男女男精品网站| 视频一区二区国产| 日韩大片b站免费观看直播| 一区二区中文字幕在线| 99国产精品久久久久久久成人热| 中国女人真人一级毛片| 国产欧美久久久久久久久| 国产美女裸体无遮挡免费视频| 亚洲性猛交xxxxwww| 91sese| 亚洲字幕一区二区| 91成人国产精品| 九九久久久久午夜精选| 国产女主播一区| 五月婷婷综合在线观看| 亚洲三级性片| 老司机色在线视频| 国产污污在线观看| 中文字幕乱伦视频| 伊人久久中文字幕| 中文字幕超清在线免费观看| bt电影在线| 欧美日韩国产综合在线| 亚洲人成网亚洲欧洲无码| 成人久久综合| 日本一区二区在线免费观看| 国产高清一级毛片在线不卡| 精品国产精品| 黄视频在线免费| 久久久久人妻精品一区三寸| 国产精品草莓在线免费观看| 欧美日韩免费观看视频| 久久久久毛片免费观看| 成人观看网址| 欧美色大人视频| 国产91丝袜在线播放九色| 波多野结衣在线播放一区| 中文字幕一区二区三区乱码| 亚洲免费一区| eeuss国产一区二区三区| 先锋影音一区二区三区| 欧美日韩激情四射| 精品人妻一区二区三区香蕉| 国产精品久久人| 亚洲最新合集| 欧美日韩国产亚洲沙发| 免费看黄色av| 日韩私人影院| 日本一区二区三区四区| 色悠悠久久久久| 亚洲另类自拍| 国产精品高潮呻吟久久| 一级片久久久久| 国产女人水真多18毛片18精品| 一区二区三国产精华液| 亚洲黄色大片| 牛牛精品在线| 成人欧美在线| 日本免费看黄色| 国产精品色哟哟网站| 日韩乱码一区二区三区| jizzjizz在线| 91青青国产在线观看精品| 久久理论片午夜琪琪电影网| 91精品在线观看视频| xxxx在线播放| 在线视频超级| 日本中文字幕免费在线观看| 成人影片在线播放| 日韩成人黄色av| av成人动漫在线观看| 欧美绝品在线观看成人午夜影视| 国产一级片中文字幕| www.国产.com| 色婷婷av一区二区三区大白胸| 快播电影网址老女人久久| 国产探花在线播放| 成人av三级| 久久黄色小视频| 精品无码人妻一区二区免费蜜桃| 成人黄色图片网站| 欧美激情视频在线观看| 黄色在线网站| 成人免费黄色在线| 欧美日韩亚洲综合| 亚洲国产精品成人va在线观看| 国产伦精品一区二区三区在线| 国产免费一区二区三区最新6| 天天干天天爱天天操| 一本色道久久综合亚洲精品小说| 国产成人免费电影| 国产精品99久久久久久宅男| 电影天堂爱爱爱爱| 国产区二精品视| a√免费观看在线网址www| 欧美色图亚洲图片| 91丨九色丨蝌蚪| 黑人巨茎大战欧美白妇| 色婷婷久久久亚洲一区二区三区| 久久精品a一级国产免视看成人| 欧美久久在线观看| 一本到不卡免费一区二区| 最新av在线播放| 激情六月婷婷综合| 欧美一级高清片在线观看| 国产成人高清精品| 中国免费黄视频| 91麻豆一区二区| 国产精品流白浆视频| 怡红院在线观看| 国产69精品久久久久9| 中文字幕国产高清| 第一次破处视频| 欧美巨大另类极品videosbest| 亚洲国产精品久久久久婷婷软件| 高清1区2区| 久久精品国产在热久久| 一级黄色大片儿| 中文字幕亚洲欧美日韩高清| 欧美69xxxxx| 久久中文视频| 日韩欧美在线观看强乱免费| 暖暖视频在线免费观看| 成人亚洲免费视频| 亚欧洲精品在线视频| 国模精品视频| 黄色片在线观看免费| 精品人妻一区二区三区换脸明星| 天天综合网久久综合网| jizzjizz少妇亚洲水多| 午夜精品福利一区二区三区蜜桃| 亚洲色图 激情小说| 国产精品7777777| 中文字幕在线播放视频| 秋霞在线一区二区| 一区二区三区区四区播放视频在线观看| 日韩一级大片| 日韩女优av电影在线观看| 四虎精品欧美一区二区免费| 三级国产三级在线| 超碰激情在线| 亚洲av少妇一区二区在线观看| 国产精品成人一区二区三区| 欧美日韩亚洲综合| 国产经品一区二区| 99久久久免费精品| 亚洲视频欧洲视频| 亚洲性xxxx| 国产精品538一区二区在线| 精品国产免费久久久久久尖叫| 久热re这里精品视频在线6| 成人无遮挡免费网站视频在线观看| 国产精品第九页| 亚洲国产精品久久久久蝴蝶传媒| 亚洲国产欧美不卡在线观看| 国产欧美视频在线观看| 国产一区美女| 一个人看的视频www| 国产精品12345| 亚洲国产欧美国产综合一区| 欧美极品一区| 日本中文字幕网址| 亚洲精品影院在线| 国产又大又黑又粗免费视频| 欧美成人高清电影在线| 日韩欧美电影| 成人动态视频| 成年人网站大全| 欧美tickling网站挠脚心| 男裸体无遮挡网站| 婷婷六月天丁香| 亚洲视频在线二区| 东方欧美亚洲色图在线| 免费看污视频的网站| 久久久久久亚洲精品杨幂换脸| 欧美精品在线一区| 亚洲免费小视频| 黄色大片网站在线观看| 麻豆视频在线观看免费网站| 国产日本在线视频| 国产99久久久精品| 精品精品视频| 大尺度做爰床戏呻吟舒畅| 精品999久久久| 欧美国产综合一区二区| 在线成人av观看| 久青草免费视频| 亚欧视频在线观看| 中国一级特黄视频| 波多野结衣中文字幕久久| 在线观看国产麻豆| 成人观看高清在线观看免费| 九色91av视频| 美女扒开腿让男人桶爽久久动漫| 91精品在线观| 日本一区二区三区免费观看| 欧美日韩高清丝袜| 亚洲色图制服丝袜| 色婷婷一区二区三区四区| 日本亚洲天堂| 亚洲精品一区久久久久久| av在线无限看| 人人爽人人爽人人片| 欧美一区二区黄色| 四虎久久免费| 国产91精品在线播放| 国产亚洲一区二区三区啪| 国产一区二区伦理片| 蜜桃免费在线视频| 国产精品系列在线| 免费国产a级片| 国产综合香蕉五月婷在线| 色先锋久久影院av| 亚洲宅男天堂在线观看无病毒| 色婷婷国产精品综合在线观看| 午夜精品国产精品大乳美女| 91丨porny丨在线| 亚洲欧美制服中文字幕| 精品一区二区三区在线观看l| 色婷婷一区二区三区四区| 九九热精品视频在线观看| 免费激情视频在线观看| 午夜精品久久99蜜桃的功能介绍| 免费一级全黄少妇性色生活片| 91精品国产91综合久久蜜臀| 久久精品91久久久久久再现| 国产丝袜美腿一区二区三区| 欧美日韩情趣电影| 亚洲二区在线播放视频| 国产97在线亚洲| 亚洲欧美春色| 国产无遮挡免费视频| 亚洲草草视频| 精品久久久久久中文字幕人妻最新| 日本特黄a级片| 香蕉成人app免费看片| 天堂网站www天堂资源在线| 亚洲国产精品ⅴa在线观看| 亚洲精品午夜久久久| 大地资源网在线观看免费官网| 婷婷激情四射五月天| 91麻豆精品一区二区三区| 欧美一区二区三区在线播放| 欧美天堂在线视频| 欧美日韩国产精品一卡|