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

首頁(yè) > 編程 > ASM > 正文

反匯編分析objc函數(shù)樞紐objc_msgSend

2019-11-09 13:43:02
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

轉(zhuǎn)自 點(diǎn)擊打開(kāi)鏈接 作者bbqz007

反匯編分析objc函數(shù)樞紐objc_msgSend

在分析objc_msgSend之前,先來(lái)搞清楚另一個(gè)問(wèn)題。

函數(shù)是什么?可能會(huì)答 void foo(void) {} 像這樣就是一個(gè)函數(shù)。或者函數(shù)包括函數(shù)原型和函數(shù)定義,是一段執(zhí)行某樣功能的機(jī)器代碼。

調(diào)用函數(shù)時(shí)必須要準(zhǔn)備兩個(gè)要素,函數(shù)原型和函數(shù)入口地址。

函數(shù)原型的作用是什么?答聲明了函數(shù)調(diào)用的方式。不夠具體。函數(shù)原型是函數(shù)調(diào)用方和函數(shù)定義之間的關(guān)于參數(shù)傳遞和結(jié)果返回的協(xié)議約定。這個(gè)協(xié)議分別作用在函數(shù)入口兩邊的代碼,一邊是調(diào)用方在調(diào)用處協(xié)議的構(gòu)建,另一邊是函數(shù)定義對(duì)協(xié)議的訪問(wèn)解釋。傳統(tǒng)地就是調(diào)用棧。原型是一個(gè)協(xié)議,協(xié)議是可以傳遞的。所以在函數(shù)被調(diào)用處,到函數(shù)的入口地址之間,是可以做任何處理,只要協(xié)議不被破壞。

而objc在函數(shù)調(diào)用和函數(shù)入口之間加入了動(dòng)態(tài)綁定的處理,這個(gè)處理就是msgSend。

大家都知道這個(gè)原型id(*IMP)(id, char*, …),而這個(gè)卻只是用于傳遞的協(xié)議,并非函數(shù)的真正的原型。對(duì)于后面的省略號(hào),傳統(tǒng)地是va_list訪問(wèn),但是實(shí)際上省略號(hào)即第三個(gè)參數(shù)開(kāi)始可以是任何其實(shí)傳參方式。至于從第三個(gè)參數(shù)開(kāi)始之后的協(xié)議是怎么約定的,在objc函數(shù)調(diào)用處和函數(shù)定義是必須明確清楚的。然而在之兩者之間的中繼路由過(guò)程中,只需要知道前兩個(gè)參數(shù)的約定,就是這個(gè)原型id()(id, char*,…),所以msgSend也是這個(gè)原型。

舉例-(id)foo:(int)i;

id foo(id, char*, int) —> id msgSend(id, char*, …) —> (id()(id, char*, …))foo

作為objc中函數(shù)調(diào)用的樞紐,我們現(xiàn)在就來(lái)看一下它的反匯編樣貌:

復(fù)制代碼
libobjc.A.dylib`objc_msgSend:->  0x107b68800 <+0>:   testq  %rdi, %rdi    0x107b68803 <+3>:   jle    0x107b68850               ; <+80>    // except the bad pointer to obj    0x107b68805 <+5>:   movq   (%rdi), %r11    0x107b68808 <+8>:   movq   %rsi, %r10    0x107b6880b <+11>:  andl   0x18(%r11), %r10d         ;            // (int32)(%rsi) &= (int32)0x18(%rdi) , (%rsi) <<= 4, (int64)(%rsi) += (int64)0x10(%rdi).    0x107b6880f <+15>:  shlq   $0x4, %r10    0x107b68813 <+19>:  addq   0x10(%r11), %r10    0x107b68817 <+23>:  cmpq   (%r10), %rsi    0x107b6881a <+26>:  jne    0x107b68820               ; <+32>    0x107b6881c <+28>:  jmpq   *0x8(%r10)                 ;            // jmp to imp    0x107b68820 <+32>:  cmpq   $0x1, (%r10)    0x107b68824 <+36>:  jbe    0x107b68833               ; <+51>    0x107b68826 <+38>:  addq   $0x10, %r10    0x107b6882a <+42>:  cmpq   (%r10), %rsi    0x107b6882d <+45>:  jne    0x107b68820               ; <+32>    0x107b6882f <+47>:  jmpq   *0x8(%r10)                                0x107b68833 <+51>:  jb     0x107b68871               ; <+113>    0x107b68835 <+53>:  movq   0x8(%r10), %r10    0x107b68839 <+57>:  jmp    0x107b68845               ; <+69>    0x107b6883b <+59>:  cmpq   $0x1, (%r10)    0x107b6883f <+63>:  jbe    0x107b6884e               ; <+78>    0x107b68841 <+65>:  addq   $0x10, %r10    0x107b68845 <+69>:  cmpq   (%r10), %rsi    0x107b68848 <+72>:  jne    0x107b6883b               ; <+59>    0x107b6884a <+74>:  jmpq   *0x8(%r10)                                0x107b6884e <+78>:  jmp    0x107b68871               ; <+113>    0x107b68850 <+80>:  je     0x107b68866               ; <+102>    // a neg pointer is a objc debug tagged pointer classes.    0x107b68852 <+82>:  leaq   0x348df7(%rip), %r11      ; objc_debug_taggedpointer_classes    0x107b68859 <+89>:  movq   %rdi, %r10    0x107b6885c <+92>:  shrq   $0x3c, %r10    0x107b68860 <+96>:  movq   (%r11,%r10,8), %r11    0x107b68864 <+100>: jmp    0x107b68808               ; <+8>        // jump back and deal with this debug obj.    0x107b68866 <+102>: xorl   %eax, %eax                 ;            // deal with a nil obj.    0x107b68868 <+104>: xorl   %edx, %edx    0x107b6886a <+106>: xorps  %xmm0, %xmm0    0x107b6886d <+109>: xorps  %xmm1, %xmm1    0x107b68870 <+112>: retq                                ;            // bad return clause.    0x107b68871 <+113>: pushq  %rbp    0x107b68872 <+114>: movq   %rsp, %rbp    0x107b68875 <+117>: subq   $0x88, %rsp                 ;            // and total push size 0x38, %rsp is 0xc0 bytes far away from %rbp when next call in soon    0x107b6887c <+124>: movdqa %xmm0, -0x80(%rbp)    0x107b68881 <+129>: pushq  %rax    0x107b68882 <+130>: movdqa %xmm1, -0x70(%rbp)    0x107b68887 <+135>: pushq  %rdi    0x107b68888 <+136>: movdqa %xmm2, -0x60(%rbp)    0x107b6888d <+141>: pushq  %rsi    0x107b6888e <+142>: movdqa %xmm3, -0x50(%rbp)    0x107b68893 <+147>: pushq  %rdx    0x107b68894 <+148>: movdqa %xmm4, -0x40(%rbp)    0x107b68899 <+153>: pushq  %rcx    0x107b6889a <+154>: movdqa %xmm5, -0x30(%rbp)    0x107b6889f <+159>: pushq  %r8    0x107b688a1 <+161>: movdqa %xmm6, -0x20(%rbp)    0x107b688a6 <+166>: pushq  %r9    0x107b688a8 <+168>: movdqa %xmm7, -0x10(%rbp)    0x107b688ad <+173>: movq   %rdi, %rdi    0x107b688b0 <+176>: movq   %rsi, %rsi    0x107b688b3 <+179>: movq   %r11, %rdx                 ;            // isa member of obj of %rdi    0x107b688b6 <+182>: callq  0x107b59c57               ; _class_lookupMethodAndLoadCache3    0x107b688bb <+187>: movq   %rax, %r11    0x107b688be <+190>: movdqa -0x80(%rbp), %xmm0    0x107b688c3 <+195>: popq   %r9    0x107b688c5 <+197>: movdqa -0x70(%rbp), %xmm1    0x107b688ca <+202>: popq   %r8    0x107b688cc <+204>: movdqa -0x60(%rbp), %xmm2    0x107b688d1 <+209>: popq   %rcx    0x107b688d2 <+210>: movdqa -0x50(%rbp), %xmm3    0x107b688d7 <+215>: popq   %rdx    0x107b688d8 <+216>: movdqa -0x40(%rbp), %xmm4    0x107b688dd <+221>: popq   %rsi    0x107b688de <+222>: movdqa -0x30(%rbp), %xmm5    0x107b688e3 <+227>: popq   %rdi    0x107b688e4 <+228>: movdqa -0x20(%rbp), %xmm6    0x107b688e9 <+233>: popq   %rax    0x107b688ea <+234>: movdqa -0x10(%rbp), %xmm7    0x107b688ef <+239>: leave      0x107b688f0 <+240>: cmpq   %r11, %r11    0x107b688f3 <+243>: jmpq   *%r11                     ;            // the real imp address related to set    0x107b688f6 <+246>: nopw   %cs:(%rax,%rax)復(fù)制代碼

 

代碼中分兩部分,第一部分是取出正確的receiver,請(qǐng)看我的反c偽代碼:

 

從代碼中可以看到,0指針被過(guò)濾直接返回,負(fù)數(shù)指針被轉(zhuǎn)換成正確的指針。負(fù)數(shù)指針?第一眼你可能會(huì)和我一樣認(rèn)為這是一個(gè)訪問(wèn)到了內(nèi)核空間的指針,因?yàn)樵?2位體系系統(tǒng)中,一般地高2G地址是內(nèi)核地址,最高位為1。但是在64位下并非就代表訪問(wèn)到了內(nèi)核地址,現(xiàn)在的x64處理器有效尋址不是64位有效尋址,而是48位,而且高16位必須與第48位一致,其余的看作無(wú)效地址。這個(gè)負(fù)數(shù)地址,其實(shí)是一類被定義為tagged的指針,作用類似于erlang的原子量atom。

接下來(lái)是另一部分,找到正確的地址入口,然后跳過(guò)去,調(diào)用協(xié)議原封不動(dòng)。請(qǐng)看我的反c偽代碼:

從代碼中可以看到SEL自始至終也只不過(guò)是一個(gè)調(diào)用名稱,SEL和IMP以key-value方式存放在各種查找表中。不用多說(shuō),先從常用cache中查找,沒(méi)有就從類描述中找出真實(shí)入口地址。在cache查找中有這么3點(diǎn)邏輯,

1.不命中,而且有效地址,下一個(gè)key-value

2.不命中,并且無(wú)效地址,中止在cache的查找

3.不命中,并且為1,必須還是首次遇到1,然后cache forward,繼續(xù)在cache中查找。

 

最后是我手工對(duì)msgSend原代碼中各處調(diào)用宏后的代碼

復(fù)制代碼
/******************************************************************** * * id objc_msgSend(id self, SEL    _cmd,...); * ********************************************************************/        .data    .align 3    .globl _objc_debug_taggedpointer_classes_objc_debug_taggedpointer_classes:    .fill 16, 8, 0    ENTRY    _objc_msgSend    MESSENGER_START    GetIsaCheckNil    NORMAL        // r11 = self->isa, or return zero    CacheLookup NORMAL        // calls IMP on success    GetIsaSupport    NORMAL// cache miss: go search the method listsLCacheMiss:    // isa still in r11    MethodTableLookup %a1, %a2    // r11 = IMP    cmp    %r11, %r11        // set eq (nonstret) for forwarding    jmp    *%r11            // goto *imp    END_ENTRY    _objc_msgSend/******************************************************************** * * id objc_msgSend(id self, SEL    _cmd,...); Expand * ********************************************************************/    .data    .align 3    .globl _objc_debug_taggedpointer_classes_objc_debug_taggedpointer_classes:    .fill 16, 8, 0    // ENTRY    _objc_msgSend.text    .globl    _objc_msgSend    .align    6, 0x90_objc_msgSend:    .cfi_startPRoc    // MESSENGER_START4:    .section __DATA,__objc_msg_break    .quad 4b    .quad ENTER    .text    testq    %a1, %a1    jle    LNilOrTagged_f    // MSB tagged pointer looks negative    movq    (%a1), %r11    // r11 = isaLGetIsaDone:        movq    %a2, %r10        // r10 = _cmd    andl    24(%r11), %r10d        // r10 = _cmd & class->cache.mask    shlq    $$4, %r10        // r10 = offset = (_cmd & mask)<<4    addq    16(%r11), %r10        // r10 = class->cache.buckets + offset    cmpq    (%r10), %a2        // if (bucket->sel != _cmd)    jne     1f            //     scan more    // CacheHit must always be preceded by a not-taken `jne` instruction    CacheHit $0            // call or return imp1:    // loop    cmpq    $$1, (%r10)    jbe    3f            // if (bucket->sel <= 1) wrap or miss    addq    $$16, %r10        // bucket++2:        cmpq    (%r10), %a2        // if (bucket->sel != _cmd)    jne     1b            //     scan more    // CacheHit must always be preceded by a not-taken `jne` instruction    CacheHit $0            // call or return imp3:    // wrap or miss    jb    LCacheMiss_f        // if (bucket->sel < 1) cache miss    // wrap    movq    8(%r10), %r10        // bucket->imp is really first bucket    jmp     2f    // Clone scanning loop to miss instead of hang when cache is corrupt.    // The slow path may detect any corruption and halt later.1:    // loop    cmpq    $$1, (%r10)    jbe    3f            // if (bucket->sel <= 1) wrap or miss    addq    $$16, %r10        // bucket++2:        cmpq    (%r10), %a2        // if (bucket->sel != _cmd)    jne     1b            //     scan more    // CacheHit must always be preceded by a not-taken `jne` instruction    CacheHit $0            // call or return imp3:    // double wrap or miss    jmp    LCacheMiss_f    .align 3LNilOrTagged:    jz    LNil_f        // flags set by NilOrTaggedTest    // tagged        leaq    _objc_debug_taggedpointer_classes(%rip), %r11    movq    %a1, %r10    shrq    $$60, %r10    movq    (%r11, %r10, 8), %r11    // read isa from table    jmp    LGetIsaDone_bLNil:    // nil    xorl    %eax, %eax    xorl    %edx, %edx    xorps    %xmm0, %xmm0    xorps    %xmm1, %xmm14:    .section __DATA,__objc_msg_break    .quad 4b    .quad NIL_EXIT    .text    ret    // cache miss: go search the method listsLCacheMiss:    // isa still in r114:    .section __DATA,__objc_msg_break    .quad 4b    .quad SLOW_EXIT    .text        SaveRegisters    // _class_lookupMethodAndLoadCache3(receiver, selector, class)    movq    %a1, %a1    movq    %a2, %a2    movq    %r11, %a3    call    __class_lookupMethodAndLoadCache3    // IMP is now in %rax    movq    %rax, %r11    RestoreRegisters    cmp    %r11, %r11        // set eq (nonstret) for forwarding    jmp    *%r11            // goto *imp        // END_ENTRY    _objc_msgSend    .cfi_endprocLExit_objc_msgSend:復(fù)制代碼


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

在线 丝袜 欧美 日韩 制服| 久久人人97超碰精品888| 视频在线观看免费影院欧美meiju| 国产专区在线视频| 999久久久国产| 久久免费播放视频| 日本一本中文字幕| 久久久久久久久四区三区| av大片在线观看| 清纯唯美亚洲色图| 天堂а√在线中文在线鲁大师| 538国产精品一区二区在线| 日韩精品你懂的| 性感小视频在线看免费| 亚洲第一搞黄网站| 久久精品视频网| 香蕉视频xxxx| 亚洲视频综合网| 亚洲视频专区在线| 国产成人三级在线观看视频| 在哪里可以看毛片| 国产亚洲午夜| 久久6免费视频| 久久国产成人精品国产成人亚洲| 亚洲免费在线电影| 一区二区免费在线播放| 先锋影音二区| 亚洲精品极品少妇16p| 午夜cr在线观看高清在线视频完整版| 成人三级在线视频| 一区二区三区四区五区| 国产福利一区二区在线精品| 国产麻豆视频免费观看| 亚洲伊人伊色伊影伊综合网| 国产视频911| av资源免费看| av污在线观看| 欧美极度另类性三渗透| 日韩av电影免费在线| 天天射天天拍| 成人av网站在线播放| 亚洲一道本在线| 香艳视频网站| 超碰精品一区二区三区乱码| 在线观看av免费| 色哟哟网站在线观看| 97婷婷大伊香蕉精品视频| 国产精品嫩草69影院| 国产精品三级美女白浆呻吟| 悠悠资源网久久精品| 99久久精品国产观看| 男人的天堂a在线| 2018中文字幕在线| 国产高清免费av在线| 日韩综合视频在线观看| 国产激情一区二区三区四区| www.日韩大片| 福利一区二区在线观看| 国产乱妇乱子在线播视频播放网站| 国产一区二区三区免费观看在线| 欧美人xxxxx| 成人黄色一区二区| 69成人在线| 婷婷综合五月天| 亚洲资源网你懂的| 日本人妻伦在线中文字幕| 中文字幕人成高清视频| 免费在线观看视频一区| 国产精品免费区二区三区观看| 免费永久网站黄欧美| 天天干天天爽| а√天堂中文在线资源bt在线| av电影天堂一区二区在线观看| 欧美成人精品一区二区综合免费| 日日躁夜夜躁白天躁晚上躁91| 精品人妻无码一区二区| 日韩高清国产一区在线观看| 亚洲精品资源美女情侣酒店| 91sao在线观看国产| 91精品一区二区三区综合| 欧美最顶级丰满的aⅴ艳星| 一区二区不卡在线视频 午夜欧美不卡'| 亚洲精品在线观看91| 韩国三级日本三级少妇99| 亚洲伦理一区二区| 一级特黄视频| 色哟哟精品丝袜一区二区| 91中文字幕网| 亚洲一区二区中文字幕在线观看| 在线观看成人毛片| 国产精品视频白浆合集| 欧美精品自拍| 国产99视频在线| 国产91亚洲精品久久久| 欧美www视频| 成年美女网站| 91精品国产欧美一区二区| 欧美一级片在线免费观看| www.国产91| 视频在线精品一区| 欧美日韩一区二区三区不卡| 狠狠躁日日躁夜夜躁av| 国内精品视频666| 久久综合另类图片小说| 七七婷婷婷婷精品国产| 国产女优一区| 日日摸日日碰夜夜爽av| 国模吧精品人体gogo| 一区国产精品视频| 日本一区二区三区视频| 日韩精品一区二区三区视频播放| 国产成a人亚洲精品| 1000部国产精品成人观看| 免费在线观看污视频| 我要看一级黄色录像| 国产私人尤物无码不卡| 国产午夜电影| 国产在线视频不卡| 国产伦精品一区二区三区免费优势| 欧美日韩亚洲丝袜制服| 欧美视频在线第一页| 精品肉丝脚一区二区三区| 黄色a级三级三级三级| 日韩在线观看免费高清完整版| 999精品一区| 一本色道久久综合一区| 青青草97国产精品免费观看| 丰满少妇在线观看| 日韩欧美高清在线| 激情亚洲影院在线观看| 午夜久久福利影院| 成人中文字幕视频| 亚洲第一天堂在线观看| 成人欧美大片| 81精品国产乱码久久久久久| 隔壁人妻偷人bd中字| 亚洲高清资源在线观看| 久久嫩草捆绑紧缚| 欧美三级午夜理伦三级中文幕| 亚洲欧美制服综合另类| 国产欧美日韩亚洲| 国产亚洲日本欧美韩国| 女人十八毛片嫩草av| 18一19gay欧美视频网站| 丁香六月综合激情| 欧美视频一区二区在线观看| 亚洲精品免费在线视频| 97久久精品人人做人人爽50路| 日本视频在线观看一区二区三区| 国产一区玩具在线观看| 美女露隐私免费网站| 99久久99久久久精品棕色圆| 国产精品19p| 天堂av资源在线观看| 99久久er热在这里只有精品15| 亚洲第一天堂av| 国产福利电影在线| 免费毛片网站在线观看| 欧美亚洲国产日本| 麻豆国产精品777777在线| 免费黄网在线观看| 尤物国产在线观看| 九九热精品视频在线| 秋霞成人午夜伦在线观看| 91好吊色国产欧美日韩在线| 日本一区二区免费在线观看| 五月激情综合婷婷| 色老头一区二区三区在线观看| 在线观看免费av网| 欧美日韩裸体免费视频| jizzjizzjizz亚洲女| jizzjizz日本护士视频| 国产精品久久一| 一二三四国产精品| 国产精品mv在线观看| 精品日本一区二区三区在线观看| 欧美美乳视频网站在线观看| 国内精品视频在线| 亚洲欧美国产高清va在线播放| 精品毛片免费观看| 98视频精品全部国产| 在线观看污网站| 欧美a级大片在线| 99久久国产综合精品女小说| 国产成人久久久精品一区| 欧美久久久久久久久| 成人黄色免费观看| 欧美高清视频在线高清观看mv色露露十八| 国产精品一区久久久久| 精品国产午夜福利在线观看| segui88久久综合9999| 又黄又www的网站| 农村寡妇一区二区三区| 丝袜连裤袜欧美激情日韩| 欧美日韩色网| 色婷婷精品久久二区二区蜜臂av| 97国产成人精品视频| 亚洲精品成人久久| 一区二区三区四区在线观看视频| 国产专区视频| 中文字幕视频精品一区二区三区| 久久久精品久久久久久96| 国产一级做a爰片久久毛片男| 欧美美女18p| 欧美一级精品在线| 竹内纱里奈兽皇系列在线观看| 国产在线资源一区| 中文字幕久热精品视频免费| 国产一级爱c视频| 美女久久精品| 一区二区三区黄色| 成人在线视频www| 日韩欧美亚洲系列| 精品福利二区三区| 国产成人亚洲综合小说区| 欧美人成在线视频| 福利成人在线观看| 国产精品亚发布| 亚洲高清久久久久久| 欧美大片顶级少妇| 4hu四虎永久网址| 亚洲最大的黄色网| 你微笑时很美电视剧整集高清不卡| 成人97人人超碰人人99| 亚洲国产精品999| 国产精彩精品视频| 91精品国产综合久久久久久久久| 日韩欧美国产综合一区| 国产一二三av| 精品国产一区av| 亚洲天堂一二三| 欧美tickling挠脚心丨vk| 影音先锋制服丝袜| 亚洲一区二区三区精品中文字幕| 国产玖玖精品视频| 色屁屁草草影院ccyycom| 国产成人一区二区三区免费看| 99国产精品久久久久久| 精品国产视频在线| 意大利激情丛林无删减版dvd| 日韩精品福利| 日本免费不卡视频| 在线视频观看91| 在线观看国产视频| 秋霞精品一区二区三区| jvid一区二区三区| 99久久精品国产网站| 久久久www成人免费毛片| 性欧美丰满熟妇xxxx性久久久| 欧美精品乱码视频一二专区| 欧美成人日本| xxxx视频在线观看| 午夜成人亚洲理伦片在线观看| 欧美成人第一页| 亚洲免费观看高清完整版在线| 国产精品欧美一区喷水| 欧美精品久久久久a| 毛片在线播放网址| 日韩啪啪电影网| 国产精品福利在线| 国产免费1000拍拍拍| 久久精品国产99国产精品澳门| 欧美人动性xxxxz0oz| 性色av蜜臀av色欲av| 国内一区二区三区在线视频| 欧美变态另类刺激| 成人在线视频www| 亚洲搞黄视频| 性无码专区无码| 久久久精品一品道一区| 九九热国产在线| 久久久久久久波多野高潮日日| 黄色精品在线观看| 7777精品伊人久久久大香线蕉完整版| 欧美成人精品欧美一级乱黄| 午夜影院免费版| 国产中文字幕在线看| 天堂中文av| 一区二区国产视频| 亚洲一区三区视频在线观看| 亚洲最新永久在线观看| 色一区二区三区| 亚洲精品久久久久久国产精华液| 在线视频观看日韩| www.91视频com| 老牛国产精品一区的观看方式| 在线精品亚洲一区二区不卡| 国产色爱av资源综合区| 在线视频国产区| 不卡日本视频| 国产精品18久久久久久久久久久久| 91香蕉国产在线观看软件| 国产精品第一视频| 97在线观看免费观看高清| 精品国产乱码久久久久久樱花| 欧洲亚洲一区二区| 日韩成人网免费视频| 久久久久久www| 精品在线一区| 中文字幕高清av| 亚洲天堂伊人网| 亚洲成人精品在线播放| 欧美做受高潮中文字幕| 麻豆网址在线观看| 国产性猛交╳xxx乱大交| 99热这里只有精品99| 99久久夜色精品国产亚洲1000部| 国产午夜精品久久久| 欧美日韩精品亚洲精品| 国产成人综合久久| 国产精品免费网站在线观看| 久久资源在线| 久久在线中文字幕| 一色桃子在线| 国产精品传媒入口麻豆| 色啦啦av综合| 麻豆精品精品国产自在97香蕉| 国产精品一区二区三区免费观看| 在线视频日韩一区| 新天天拍日日拍狠狠拍| 免费一区二区三区在在线视频| 国产精品一区二区久久久久| 蜜乳av另类精品一区二区| 国产一区二区在线观看视频| 久久精品视频在线免费观看| 国产女人18毛片水18精| 欧美乱妇视频| 五月天亚洲综合|