精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java代碼引起的NATIVE野指針問題(上)

開發 后端 開發工具
所謂野指針就是一個對象被釋放后又被使用,可能是釋放的問題,也可能是使用的問題。我們已經知道使用的位置,接下來要找出是從哪釋放的。找到釋放對象的最笨的方法,是在free()函數里打印調用棧。

 

[[177042]]

樸英敏,小米MIUI部門。從事嵌入式開發和調試工作8年多,擅長逆向分析方法,主要負責解決安卓系統穩定性問題。

 

上周音樂組同事反饋了一個必現Native Crash問題,tombstone如下:

  1. pid: 5028, tid: 5028, name: com.miui.player  >>> com.miui.player <<< 
  2. signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 79801f28 
  3.     r0 7ac59c98  r1 00000000  r2 bea7b174  r3 400fc1b8 
  4.     r4 774c4c88  r5 79801f28  r6 bea7b478  r7 40c12bb8 
  5.     r8 7c1b68e8  r9 778781e8  sl bea7b478  fp bea7b414 
  6.     ip 00000001  sp bea7b148  lr 40c07031  pc 79801f28  cpsr 600f0010 
  7. backtrace: 
  8.     #00  pc 0000bf28  <unknown> 
  9.     #01  pc 0002302f  /system/lib/libhwui.so (android::uirenderer::OpenGLRenderer::callDrawGLFunction(android::Functor*, android::uirenderer::Rect&)+322) 
  10.     #02  pc 00015d91  /system/lib/libhwui.so (android::uirenderer::DrawFunctorOp::applyDraw(android::uirenderer::OpenGLRenderer&, android::uirenderer::Rect&)+28) 
  11.     #03  pc 00014527  /system/lib/libhwui.so (android::uirenderer::DrawBatch::replay(android::uirenderer::OpenGLRenderer&, android::uirenderer::Rect&, int)+74) 
  12.     #04  pc 00014413  /system/lib/libhwui.so (android::uirenderer::DeferredDisplayList::flush(android::uirenderer::OpenGLRenderer&, android::uirenderer::Rect&)+218) 
  13.     #05  pc 0001d1cf  /system/lib/libhwui.so (_ZN7android10uirenderer14OpenGLRenderer15drawDisplayListEPNS0_11DisplayListERNS0_4RectEi.part.47+230) 
  14.     #06  pc 0006820d  /system/lib/libandroid_runtime.so 

 

崩潰的原因是pc指向了一個沒有可執行權限的內存地址上。

初步分析:

對應的代碼如下:

  1. status_t OpenGLRenderer::callDrawGLFunction(Functor* functor, Rect& dirty) { 
  2.  
  3. if (mSnapshot->isIgnored()) return DrawGlInfo::kStatusDone; 
  4.  
  5. detachFunctor(functor); 
  6.  
  7. ... 
  8.  
  9. interrupt(); 
  10.  
  11. => status_t result = (*functor)(DrawGlInfo::kModeDraw, &info); 

 

其中,Functor類重載了()操作符:

  1. class Functor { 
  2.  
  3. public
  4.  
  5. Functor() {} 
  6.  
  7. virtual ~Functor() {} 
  8.  
  9. => virtual status_t operator ()(int /*what*/, void* /*data*/) { return NO_ERROR; } 
  10.  
  11. }; 

 

因此,()操作其實就是調用了Functor類的一個虛函數,它的具體實現目前還不清楚。

對應的匯編代碼如下:

  1. 23028: aa0b add r2, sp, #44 
  2.  
  3. 2302a: 6803 ldr r3, [r0, #0] ; r0是functor,r3 = [r0] = functor.vtlb 
  4.  
  5. 2302c: 689d ldr r5, [r3, #8] ; r5 = [r3 + 8] = [functor.vtlb + 8] = Functor.operator() 
  6.  
  7. 2302e: 47a8 blx r5 ; call Functor.operator() 

 

崩潰時的寄存器值如下:

  1. r0 7ac59c98 r1 00000000 r2 bea7b174 r3 400fc1b8 
  2.  
  3. r4 774c4c88 r5 79801f28 r6 bea7b478 r7 40c12bb8 
  4.  
  5. r8 7c1b68e8 r9 778781e8 sl bea7b478 fp bea7b414 
  6.  
  7. ip 00000001 sp bea7b148 lr 40c07031 pc 79801f28 cpsr 600f0010 

 

可以看到,r5和pc值是相等的,可以知道,確定是崩潰在2302e這一行匯編代碼中。

而查看寄存器對應的內存值,發現有點問題:

  1. memory near r0: 
  2.     7ac59c78 00000018 0000001b 735a9b38 23831ef0   
  3.     7ac59c88 23831ef0 735a9b50 00000018 00000011   
  4.     7ac59c98 79822328 77768698 00000010 00000022   
  5.     7ac59ca8 00000000 00000000 00000000 00000003   
  6.  
  7. memory near r3: 
  8.     400fc198 7c74c000 00200000 00000077 0d44acd8   
  9.     400fc1a8 00000000 00000000 400fc1a8 400fc1a8   
  10.     400fc1b8 400fc1b0 400fc1b0 7c04acb8 7c78f008   
  11.     400fc1c8 7c021d98 7c78ffc0 7983bbf0 7c04bfa8 

 

[r0] = [7ac59c98] = 798223298,這個和r3值(400fc1b8)不一樣,

同樣

[r3+8] = [400fc1b8 + 8] = 7c04acb8,這個值也和r5值(79801f28)不一樣。

這在平時的tombstone里是非常少見的!

乍一看非常不可思議,但仔細想想tombstone的生成過程,就能發現其中的問題。

原來寄存器信息是錯位崩潰時的cpu context,保存在崩潰時的線程私有的信號棧和內核棧中,直到debuggerd去獲取這個值,它是不會被修改的。

而內存是進程中的各個線程共享的,所以在發生異常到debuggerd打印內存信息這段過程中(其實是相對很長的一個過程),別的線程是有可能修改內存值的。

為了證明別的線程在改這個內存值,在callDrawGLFunction()函數中的若干處打印了Functor和它的vtbl(虛函數表地址)值:

  1. status_t OpenGLRenderer::callDrawGLFunction(Functor* functor, Rect& dirty) { 
  2.  
  3. AOGI("functor=%p,vtbl=%p"); 
  4.  
  5. sleep(1); 
  6.  
  7. if (mSnapshot->isIgnored()) return DrawGlInfo::kStatusDone; 
  8.  
  9. AOGI("functor=%p,vtbl=%p"); 
  10.  
  11. sleep(1); 
  12.  
  13. detachFunctor(functor); 
  14.  
  15. ... 
  16.  
  17. AOGI("functor=%p,vtbl=%p"); 
  18.  
  19. sleep(1); 
  20.  
  21. interrupt(); 
  22.  
  23. AOGI("functor=%p,vtbl=%p"); 
  24.  
  25. sleep(1); 
  26.  
  27. status_t result = (*functor)(DrawGlInfo::kModeDraw, &info); 

 

抓到的log如下:

  1. 10-27 21:19:45.794 8027 8027 I OpenGLRenderer: functor=0x7a7b8530,vtbl=0x73648de0 
  2.  
  3. 10-27 21:19:47.801 8027 8027 I OpenGLRenderer: functor=0x7a7b8530,vtbl=0x73648de0 
  4.  
  5. 10-27 21:19:48.801 8027 8027 I OpenGLRenderer: functor=0x7a7b8530,vtbl=0x73648de0 
  6.  
  7. 10-27 21:19:49.801 8027 8027 I OpenGLRenderer: functor=0x7a7b8530,vtbl=0x73648de0 
  8.  
  9. 10-27 21:19:50.804 8027 8027 I OpenGLRenderer: functor=0x7a7b8530,vtbl=0x73648de0 
  10.  
  11. 10-27 21:19:51.804 8027 8027 I OpenGLRenderer: functor=0x7a7b8530,vtbl=0x400fc1b8 

 

可以確定確實有別的線程在修改這個值。

這里就存在兩個可能性了:

1、別的線程也持有functor指針,并修改內容

2、functor是野指針,對應的內存已經還回系統,其他模塊可任意使用。

而對象的vtbl一般是不會修改的,所以2的可能性更大一些。

為了查明是哪個線程在改,對functor指向的內存做了寫保護操作:

  1. static int** s_saved_vtbl = NULL
  2. static void* s_saved_functor = NULL
  3.  
  4. static void  mprotect_local(int** p) { 
  5.     // 一旦發現vtbl有變化就將對應內存設置為只讀 
  6.     if(p != s_saved_vtbl) {  
  7.         mprotect((void*)((unsigned int)s_saved_functor&0xfffff000), 4096, PROT_READ); 
  8.     } 
  9.     sleep(1); 
  10.  
  11. status_t OpenGLRenderer::callDrawGLFunction(Functor* functor, Rect& dirty) { 
  12.     int* ptr = (int*)functor; 
  13.     s_saved_functor = (void*)ptr; 
  14.     s_saved_vtbl = (int**)*ptr; 
  15.  
  16.     if (mSnapshot->isIgnored()) return DrawGlInfo::kStatusDone;  
  17.  
  18.     mprotect_local((int**)*ptr); 
  19.     detachFunctor(functor); 
  20.     mprotect_local((int**)*ptr); 
  21.     ... 
  22.     mprotect_local((int**)*ptr); 
  23.     interrupt(); 
  24.   
  25.     status_t result = (*functor)(DrawGlInfo::kModeDraw, &info); 

 

push到手機中復現問題,很容易抓到訪問權限引起的crash。

而每次的crash的線程和位置都不一樣,也就是不同的線程在不同的函數中讀寫這個地址。

這樣基本上就確定是野指針問題,進入下一階段的分析。

關于野指針:

所謂野指針就是一個對象被釋放后又被使用,可能是釋放的問題,也可能是使用的問題。

我們已經知道使用的位置,接下來要找出是從哪釋放的。

找到釋放對象的最笨的方法,是在free()函數里打印調用棧。

但這么做有兩個問題:

1、log太量多,一秒內可能會有成千上萬的malloc/free函數被調用。

2、打印調用棧的函數本身會調用free函數,這樣會陷入死循環。

為了解決上面兩個問題,需要用到hook技術。

關于hook技術:

要了解hook技術,得先了解外部函數的調用過程。

所謂外部函數就是外部模塊中定義的函數。比如,libhwui.so中的某個源文件中調用了malloc函數,而這個malloc函數是libc.so中定義的。

當編譯libhwui.so的這個源文件時,對應調用malloc的地方會生成如下的匯編代碼:

 

  1. blx addr 

這里blx是arm的跳轉指令,addr是目標地址,也就是malloc函數的地址,那這個malloc函數的地址如何確定?

這個編譯的階段是無法確定的,只有當運行時進程加載完libc.so以后,malloc函數的地址才能被確定。

所以編譯器在編譯的時候會在libbinder.so中留出一部分空間作為地址表,專門用于存放外部函數的地址,這個區域叫got表。

每一個本模塊調用到的外部函數都對應got表中的一項。

當然got表里面的內容是在進程啟動階段,加載動態庫時被連接器linker填充的。

而編譯階段我們只需要將代碼寫成:

1、從got表對應位置獲取外部函數地址

2、跳轉到這個外部函數的地址

這個動作需要由若干的指令來完成,所以跳轉指令blx addr中的addr其實指向本模塊的一組指令:

  1. blx cb74 <malloc@plt> 

這組指令所在的區域就是elf文件結構里的plt表,plt表中每一個外部函數都對應一個表項,如:

0000cb74 <malloc@plt>:

cb74: e28fc600 add ip, pc, #0, 12

cb78: e28cca29 add ip, ip, #167936 ;

cb7c: e5bcf1e8 ldr pc, [ip, #488]! ;

0000c8bc <free@plt>:

c8bc: e28fc600 add ip, pc, #0, 12

c8c0: e28cca29 add ip, ip, #167936 ;

c8c4: e5bcf3b8 ldr pc, [ip, #952]! ;

每一個plt表項都是做相同操作:

1、先獲取got表中外目標函數對應的地址(前兩行);

2、從got表中獲取地址目標函數的地址,并賦給pc寄存器(第三行)。

下面給出got表和plt表在so文件中的位置:

readelf -S libhwui.so

[Nr] Name Type Addr Off Size ES Flg Lk Inf Al

[ 0] NULL 00000000 000000 000000 00 0 0 0

[ 1] .interp PROGBITS 00000134 000134 000013 00 A 0 0 1

[ 2] .dynsym DYNSYM 00000148 000148 002420 10 A 3 1 4

[ 3] .dynstr STRTAB 00002568 002568 0056a4 00 A 0 0 1

[ 4] .hash HASH 00007c0c 007c0c 001134 04 A 2 0 4

[ 5] .rel.dyn REL 00008d40 008d40 002bc8 08 A 2 0 4

[ 6] .rel.plt REL 0000b908 00b908 000a78 08 A 2 7 4

=>[ 7] .plt PROGBITS 0000c380 00c380 000fc8 00 AX 0 0 4

[ 8] .text PROGBITS 0000d348 00d348 01ef30 00 AX 0 0 8

[ 9] .ARM.exidx ARM_EXIDX 0002c278 02c278 001fb8 08 AL 8 0 4

[10] .ARM.extab PROGBITS 0002e230 02e230 000930 00 A 0 0 4

[11] .rodata PROGBITS 0002eb60 02eb60 0036a4 00 A 0 0 4

[12] .fini_array FINI_ARRAY 00034010 033010 000004 00 WA 0 0 4

[13] .data.rel.ro PROGBITS 00034018 033018 001910 00 WA 0 0 8

[14] .init_array INIT_ARRAY 00035928 034928 00000c 00 WA 0 0 4

[15] .dynamic DYNAMIC 00035934 034934 000140 08 WA 3 0 4

=>[16] .got PROGBITS 00035a74 034a74 00058c 00 WA 0 0 4

[17] .data PROGBITS 00036000 035000 00025c 00 WA 0 0 4

[18] .bss NOBITS 0003625c 03525c 000068 00 WA 0 0 4

[19] .comment PROGBITS 00000000 03525c 000010 01 MS 0 0 1

[20] .note.gnu.gold-ve NOTE 00000000 03526c 00001c 00 0 0 4

[21] .ARM.attributes ARM_ATTRIBUTES 00000000 035288 00003e 00 0 0 1

[22] .gnu_debuglink PROGBITS 00000000 0352c6 000010 00 0 0 1

[23] .shstrtab STRTAB 00000000 0352d6 0000dc 00 0 0 1

我們的hook技術就是通過修改so的got表來截獲so中的某些外部函數調用。

so的代碼段是多個進程共享的,但它的數據段私有的,而got表就是數據段。

所以我們只修改music應用進程的libhwui.so的got表中free函數對應的項,影響范圍將大大減少。

那改成什么值呢?一般是我們自己定義的函數,比如:

  1. void inject_free(void *ptr)   { 
  2.     ALOGI("free ptr=%p",ptr); 
  3.     dumpNativeStack(); 
  4.     dumpJavaStack(); 
  5.     free(ptr); 

 

為了不影響原來的邏輯,打印完debug信息,還是要調用原來被hook的函數。

有了hook技術后能完美的解決野指針中的兩個問題,下面繼續分析問題。

【本文是51CTO專欄“小米開放平臺”的原創文章,“小米開放平臺”微信公眾號:xiaomideveloper】

 

責任編輯:龐桂玉 來源: 小米開放平臺
相關推薦

2016-11-24 15:39:03

JavaNATIVE野指針

2021-08-06 13:48:53

C語言野指針內存

2023-12-26 12:13:31

野指針C++編程

2023-05-29 18:33:30

得物H5容器

2021-07-29 20:28:24

靜態代碼Hdfs

2017-05-03 16:26:24

MySQL并發死鎖

2010-05-19 10:00:17

2022-08-05 11:55:13

FlutteriOS

2011-07-12 17:33:09

PHP

2016-12-12 12:37:45

結構C代碼賦值

2025-02-14 08:59:09

2018-04-10 13:02:51

HBase寫入流程數據

2014-06-04 09:34:36

2025-01-08 08:47:44

Node.js內存泄露定時器

2021-09-02 07:56:46

HDFSHIVE元數據

2022-07-10 07:51:46

元宇宙3DWeb

2024-01-03 16:39:07

2022-11-03 16:10:29

groovyfullGC

2024-04-25 10:06:03

內存泄漏

2010-09-14 10:41:59

無線網絡配置
點贊
收藏

51CTO技術棧公眾號

在线观看日本网站| 制服.丝袜.亚洲.中文.综合| 日韩电影免费观看中文字幕| 日韩成人在线资源| 午夜精品久久久久久久久久久久久蜜桃| 国产 日韩 欧美一区| 亚洲午夜精品一区 二区 三区| 亚洲第一狼人社区| 亚洲伊人久久大香线蕉av| brazzers精品成人一区| 免费在线中文字幕| 一本到12不卡视频在线dvd| 日韩午夜在线播放| 中文精品一区二区三区| 亚洲黄网在线观看| 日韩精品免费一区二区三区竹菊 | 中文字幕日本在线| 国产精品久久久久久模特 | 91国内精品久久| 成年人网站av| 性开放的欧美大片| 亚洲精品三级| 亚洲精品电影网在线观看| 国产精品无码免费专区午夜| av在线资源观看| 国产精品91一区二区三区| 欧美日韩综合在线| 宅男在线精品国产免费观看| 中文字幕一区二区免费| 狠狠综合久久av一区二区蜜桃| 婷婷六月综合网| 精品久久久久亚洲| 日本三级黄色大片| 国产区精品视频在线观看豆花| 亚洲另类色综合网站| 亚洲tv在线观看| 久久人人爽人人爽人人片av免费| 精品久久久亚洲| 欧美亚洲日本一区| 中文字幕一区二区三区有限公司 | 国产精品123| 精品中文字幕在线2019| 日本人妻一区二区三区| а√在线中文在线新版| 91丨九色丨黑人外教| 日韩美女视频中文字幕| 美女100%露胸无遮挡| 国产精品4hu.www| 亚洲欧美色图小说| 国内视频一区| 一级片在线观看免费| 精品91久久久久| 亚洲加勒比久久88色综合| 亚洲综合中文网| 老司机成人影院| 国产精品久久久久久亚洲伦 | 无码人妻精品一区二| 一本色道88久久加勒比精品| 日韩av影院在线观看| 91精品国产三级| 交100部在线观看| 亚洲在线观看免费视频| 欧美中文娱乐网| 国产手机视频在线| 久久精品欧洲| 久久亚洲春色中文字幕| 免费黄色三级网站| 久久69成人| 亚洲一区二区三区美女| 日本午夜一区二区三区| 国产精品影院在线| 国产凹凸在线观看一区二区| 热久久视久久精品18亚洲精品| 娇小11一12╳yⅹ╳毛片| 成人h动漫精品一区二区器材| 色婷婷国产精品综合在线观看| 特级毛片在线免费观看| 天堂av在线资源| 国产在线乱码一区二区三区| 日本中文字幕成人| 中文区中文字幕免费看| 久久成人免费网站| 日韩av免费网站| 蜜臀99久久精品久久久久小说 | 国产一区二区三区91| 亚洲色图狂野欧美| 台湾佬美性中文| 成人爽a毛片| 国产视频在线观看一区二区| 一区二区在线免费观看视频| 成人av婷婷| 国产一区二区三区视频在线观看 | 波多野结衣在线一区| 国产精品99久久久久久久久久久久| 高h视频免费观看| 成人免费看片39| 亚洲美女激情视频| 人妻无码中文久久久久专区| 日韩精品一区国产| 91精品久久久久久久99蜜桃| 亚洲美女精品视频| 欧美片网站免费| 欧美精品日韩综合在线| 一本大道熟女人妻中文字幕在线| 视频在线观看入口黄最新永久免费国产| 中文av一区二区| 午夜一区二区三区| 色播色播色播色播色播在线 | 农村末发育av片一区二区| 亚洲bt欧美bt精品777| 欧美成人一级视频| 国产在线观看中文字幕| 女仆av观看一区| 亚洲精品99久久久久中文字幕| 国产精品无码无卡无需播放器| 综合视频在线| 国产精品久久久久aaaa九色| 香蕉污视频在线观看| 国产黑丝在线一区二区三区| 欧美综合77777色婷婷| 亚洲电影视频在线| 欧美放荡的少妇| 久久精品—区二区三区舞蹈| 精品国产一区二区三区| 久久久久久久久网站| 国产精品2020| 国产精品美女久久久| 亚洲一区二区三区视频| 番号集在线观看| 欧美视频在线观看免费网址| 熟妇人妻va精品中文字幕 | 国产精品久久久久久麻豆一区软件| 97成人精品区在线播放| 亚洲老妇色熟女老太| 成人网在线播放| 精品国产一区二区三区日日嗨 | 亚洲欧洲日本在线| 最新av在线免费观看| 免费在线观看一区| 欧美久久久久久久久中文字幕| 三叶草欧洲码在线| 国内精品伊人久久久| 欧美在线国产精品| 成人免费一区二区三区| 极品美女销魂一区二区三区 | 另类视频在线观看| 一级片在线观看视频| 国产高清在线观看免费不卡| 亚洲午夜精品久久久久久浪潮| 怡红院红怡院欧美aⅴ怡春院| 亚洲国产乱码最新视频| 日本黄色www| 午夜天堂精品久久久久| 51精品国产黑色丝袜高跟鞋| 国产成人手机在线| 日本一二三不卡| 午夜dv内射一区二区| 欧美国产中文高清| 色综合久久久888| 丰满人妻一区二区三区四区53 | 亚洲精品成人三区| a毛片在线观看| 欧美午夜片欧美片在线观看| 第四色在线视频| 亚洲欧美bt| 91嫩草免费看| 国产中文字幕在线播放| 亚洲激情中文1区| 97在线播放视频| 警花av一区二区三区| 欧美理论电影在线播放| 亚洲欧美激情国产综合久久久| 亚洲一区二区在线免费观看视频| 在线免费看黄色片| 911精品美国片911久久久| 91超碰caoporn97人人| 日本护士...精品国| 欧洲精品一区二区| 中文字幕在线永久| 视频一区二区中文字幕| 国产a一区二区| 免费av在线网站| 一本一道久久a久久精品| 国产成人av一区二区三区不卡| 免费成人性网站| 欧美日韩国产高清视频| av成人 com a| 欧美精品日日鲁夜夜添| 久久免费黄色网址| 韩国欧美国产一区| 国产综合中文字幕| 51精品国产| 欧美成人全部免费| 国产精品视频第一页| 国产精品美女视频| 香蕉视频免费网站| 蜜臀av性久久久久蜜臀aⅴ| 国产一区二区三区播放| 成人污污www网站免费丝瓜| 色哟哟网站入口亚洲精品| 无码人妻精品一区二区| 亚洲精品老司机| 受虐m奴xxx在线观看| 国产在线视视频有精品| 国产日产欧美视频| 中文字幕日韩一区二区不卡| 欧美日韩一区二区三区免费| 久久69av| 国产精品最新在线观看| 亚洲精品承认| 日韩精品中文在线观看| av资源免费看| 欧美日韩国产成人在线免费| 任我爽在线视频| 久久伊99综合婷婷久久伊| 男人靠女人免费视频网站| 欧美一区二区三区久久精品| 久久精品女人的天堂av| 色老头在线一区二区三区| 日韩精品欧美激情| 亚洲第一天堂网| 91.com在线观看| 中文字幕第31页| 色悠久久久久综合欧美99| 国产精品99精品无码视| 一区二区视频在线看| 国产美女久久久久久| 国产精品538一区二区在线| 中文久久久久久| 亚洲女同另类| 亚洲图片都市激情| 精品在线观看入口| 国产精品老牛影院在线观看| 免费黄色网页在线观看| 国产一区二区三区精品久久久| 天天操天天干天天干| 日本道免费精品一区二区三区| 99国产精品免费| 久久亚洲一区二区三区四区| 亚洲欧美在线不卡| 99这里都是精品| 免费一级特黄录像| 日韩国产欧美视频| 久久av喷吹av高潮av| а√中文在线天堂精品| 亚洲一区二区三区sesese| 国产精品色婷婷在线观看| 国产在线精品自拍| 91超碰在线播放| 久久久久亚洲精品成人网小说| 日本ー区在线视频| 日韩av在线网| 青青色在线视频| 一本一本久久a久久精品综合小说| 国产精品自偷自拍| 欧美一区二区三区喷汁尤物| 精品美女久久久久| 精品久久久久久国产91| 黄色片免费观看视频| 欧美性猛交xxxx黑人| 欧美一区二区三区久久久| 欧美亚一区二区| 国产精品久久久国产盗摄| 日韩免费视频一区二区| jizz国产在线| 欧美三级电影一区| 国产情侣自拍小视频| 精品三级在线观看| 日韩a在线观看| 在线看欧美日韩| 成人看av片| 久久久亚洲国产| 奇米777日韩| 97在线视频国产| 自由的xxxx在线视频| 欧美激情videos| 国产cdts系列另类在线观看| 久久国产精品视频| 嗯啊主人调教在线播放视频| 91精品国产色综合| 激情欧美一区二区三区黑长吊| 亚洲a∨日韩av高清在线观看| 高清日韩欧美| 亚洲乱码一区二区三区 | www国产亚洲精品久久网站| 黄色片网站免费在线观看| 国产视频久久网| 黄色av电影在线播放| 亚洲性无码av在线| 18+视频在线观看| 国产成人啪精品视频免费网| 国产亚洲字幕| 免费久久99精品国产自| 成人自拍在线| 日韩免费毛片| 韩日在线一区| 久久久99精品视频| 久久一区亚洲| 无码人妻一区二区三区免费n鬼沢 久久久无码人妻精品无码 | 天天摸天天碰天天添| 国产在线国偷精品产拍免费yy| 国产精品扒开腿做爽爽爽a片唱戏| 欧美激情资源网| 精品人妻一区二区三区香蕉| 国产精品久久久久久久久果冻传媒 | 久青草免费视频| 精品婷婷伊人一区三区三| 六月婷婷综合网| 久久久国产成人精品| 色开心亚洲综合| 琪琪亚洲精品午夜在线| 精品一区二区三区中文字幕视频| 人禽交欧美网站免费| 一区在线免费| 国产探花在线观看视频| 国产欧美一区二区精品仙草咪| 国产一级二级毛片| 91精品国产免费| 日本最新在线视频| 国产精品九九九| 免费久久久久久久久| av在线观看地址| 亚洲一区欧美二区| 无码人妻一区二区三区一| 一色桃子久久精品亚洲| 日本丰满少妇做爰爽爽| 精品视频—区二区三区免费| 污的网站在线观看| 亚洲精品欧美日韩| 国产精品久久久久久麻豆一区软件| 欧洲熟妇精品视频| 久久精品欧美一区二区三区不卡| 国产精品综合激情| 亚洲天堂a在线| 91精品视频免费在线观看| 亚洲欧美国产制服动漫| 国模私拍一区二区国模曼安| 国产激情一区二区三区在线观看 | 日韩伦理在线免费观看| 国产成人免费视频网站高清观看视频| 国产精品夜夜夜爽阿娇| 亚洲男人的天堂在线观看| 曰批又黄又爽免费视频| 日韩精品资源二区在线| 看黄网站在线观看| 91久久精品在线| 亚洲国产合集| 97在线播放视频| 国产人成亚洲第一网站在线播放 | 欧美裸体bbwbbwbbw| 欧美日韩视频在线播放| 成人av在线亚洲| 国产精品jk白丝蜜臀av小说| 久久男人资源站| 9i在线看片成人免费| av黄色在线播放| 日韩一区二区在线看片| 性欧美1819sex性高清大胸| 97操在线视频| 亚洲另类自拍| 亚洲成人网在线播放| 欧美性欧美巨大黑白大战| 91最新在线| 18成人免费观看网站下载| 欧美日本国产| 午夜精品中文字幕| 91亚洲精华国产精华精华液| 久草福利资源在线| 日韩一区二区三区免费看 | 亚洲av综合色区无码另类小说| 亚洲综合免费观看高清完整版在线| 蜜桃视频在线观看www| 日韩一区二区欧美| 日本免费精品| 131美女爱做视频| 国产精品99久| 久久精品这里有| 精品一区二区三区电影| 草莓视频成人appios| 免费看污污视频| 26uuu另类欧美亚洲曰本| 99re热视频| 欧美高清视频一区二区| 香蕉久久精品| а 天堂 在线| 欧美高清在线一区二区| 国产日产亚洲系列最新| 2019亚洲男人天堂| 天天射天天综合网| 国产黄色三级网站| 欧美精品vⅰdeose4hd| 波多野一区二区| 自拍另类欧美| 91色.com| 国内精品偷拍视频| 日韩美女视频免费看| 欧美高清不卡| 国产黄色片在线| 亚洲精品乱码久久久久久金桔影视| 色狠狠一区二区三区|