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

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

開發(fā) 后端 開發(fā)工具
我們有了hook,但目前還不知道是哪個so中釋放了functor。如果無法確定是哪個so,可以多hook幾個so就行了。

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

樸英敏,小米MIUI部門。從事嵌入式開發(fā)和調(diào)試工作8年多,擅長逆向分析方法,主要負(fù)責(zé)解決安卓系統(tǒng)穩(wěn)定性問題。 

實施hook:

我們有了hook,但目前還不知道是哪個so中釋放了functor。

如果無法確定是哪個so,可以多hook幾個so就行了。

當(dāng)然對于特定的例子,也有技巧來確定so,比如我們這個例子:

被析構(gòu)的對象是Functor類的對象,由于它的vtbl地址我們能夠從log中獲取到,

而vtbl一般指向定義了該類的so中,所以用vtbl值(0×73648de0)去map表中找,就能確定是哪個so了。

  1. ... 
  2.   73635000-73646000 rw-p 00000000 00:00 0 
  3.   73646000-73648000 r-xp 00000000 b3:18 1287       /system/lib/libwebviewchromium_plat_support.so 
  4. =>73648000-73649000 r--p 00001000 b3:18 1287       /system/lib/libwebviewchromium_plat_support.so  
  5.   73649000-7364a000 rw-p 00002000 b3:18 1287       /system/lib/libwebviewchromium_plat_support.so 
  6.   7364a000-73684000 rw-p 00000000 00:00 0 
  7.   73684000-73696000 r-xp 00000000 b3:18 1034       /system/lib/libjavacrypto.so 
  8.   73696000-73697000 r--p 00011000 b3:18 1034       /system/lib/libjavacrypto.so 
  9.   73697000-73698000 rw-p 00012000 b3:18 1034       /system/lib/libjavacrypto.so 
  10.   ... 

 

而需要注意的是,C++對象的釋放是delete函數(shù),

libwebviewchromium_plat_support.so不會直接調(diào)用libc的free函數(shù),而是調(diào)用libc++.so中的delete函數(shù),再由delete函數(shù)調(diào)用free函數(shù),

所以我們得hook libc++.so的free函數(shù),但打印調(diào)用棧的模塊也依賴libc++.so,所以如果在hook函數(shù)中打印調(diào)用棧,也會遇到死循環(huán)問題。

所以我們得hook libwebviewchromium_plat_support.so中的delete函數(shù),這樣既減少log量,也能避免死循環(huán)。

先確認(rèn)libwebviewchromium_plat_support.so是否依賴了delete函數(shù):

  1. $ readelf -s libwebviewchromium_plat_support.so |grep UND 
  2.      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
  3.      1: 00000000     0 FUNC    GLOBAL DEFAULT  UND __cxa_finalize 
  4.      2: 00000000     0 FUNC    GLOBAL DEFAULT  UND __cxa_atexit 
  5.      4: 00000000     0 FUNC    GLOBAL DEFAULT  UND __aeabi_unwind_cpp_pr0 
  6.      5: 00000000     0 FUNC    GLOBAL DEFAULT  UND __aeabi_unwind_cpp_pr1 
  7.      6: 00000000     0 FUNC    GLOBAL DEFAULT  UND getrlimit 
  8.      7: 00000000     0 FUNC    GLOBAL DEFAULT  UND setrlimit 
  9.      8: 00000000     0 FUNC    GLOBAL DEFAULT  UND __errno 
  10.      9: 00000000     0 FUNC    GLOBAL DEFAULT  UND strerror 
  11.     10: 00000000     0 FUNC    GLOBAL DEFAULT  UND __android_log_print 
  12. =>  11: 00000000     0 FUNC    GLOBAL DEFAULT  UND _Znwj 
  13. =>  12: 00000000     0 FUNC    GLOBAL DEFAULT  UND _ZdlPv 
  14.     14: 00000000     0 FUNC    GLOBAL DEFAULT  UND __android_log_assert 
  15.     ... 
  16.     51: 00000000     0 FUNC    GLOBAL DEFAULT  UND __aeabi_llsr 
  17.     52: 00000000     0 OBJECT  GLOBAL DEFAULT  UND __popcount_tab 

 

其中11項_Znwj是new的符號,_ZdlPv是delete的符號。

接下來就用工具h(yuǎn)ook libwebviewchromium_plat_support.so的delete函數(shù):

  1. extern void _ZdlPv(void *); 
  2. void inject__ZdlPv(void* ptr) { 
  3.     LOGD("delete %p",ptr); 
  4.     dumpNativeStack(); 
  5.     dumpJavaStack(); 
  6.     _ZdlPv(ptr); 

 

hook后復(fù)現(xiàn)問題,抓到的log如下:

 

  1. 10-27 21:19:52.961  8027  8027 D ObserverLayout: onStop: clz=com.miui.player.display.view.DisplayFragmentLayout{45665838 V.E..... ........ 0,0-1080,1920 #7f080039 app:id/content} 
  2. 10-27 21:19:52.965  8027  8027 I MusicBaseFragment: onDestroyView  the view is still attached, delay destroy 
  3. 10-27 21:19:52.966  8027  8027 D INJECT  : delete 0x7a7b8530 
  4. 10-27 21:19:52.986  8027  8027 D INJECT  : #00  pc 000015f6  /system/lib/libinject.so (inject__ZdlPv+21) 
  5. 10-27 21:19:52.986  8027  8027 D INJECT  : #01  pc 00001134  /system/lib/libwebviewchromium_plat_supp 
  6. 10-27 21:19:52.986  8027  8027 D INJECT  : #02  pc 00001088  /system/lib/libwebviewchromium_plat_supp 
  7. 10-27 21:19:52.987  8027  8027 D INJECT  : #03  pc 0001d30c  /system/lib/libdvm.so (dvmPlatformInvoke+112) 
  8. 10-27 21:19:52.987  8027  8027 D INJECT  : #04  pc 0004d8da  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JV+397) 
  9. 10-27 21:19:52.987  8027  8027 D INJECT  : #05  pc 00026720  /system/lib/libdvm.so 
  10. 10-27 21:19:52.987  8027  8027 D INJECT  : #06  pc 0002d790  /system/lib/libdvm.so (dvmMterpStd(Thread*)+76) 
  11. 10-27 21:19:52.987  8027  8027 D INJECT  : #07  pc 0002adf4  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JVa+184) 
  12. 10-27 21:19:52.988  8027  8027 D INJECT  : #08  pc 00060058  /system/lib/libdvm.so (dvmInvokeMethod(Object*, Method const*, +391) 
  13. 10-27 21:19:52.988  8027  8027 D INJECT  : #09  pc 00067ff6  /system/lib/libdvm.so 
  14. 10-27 21:19:52.988  8027  8027 D INJECT  : #10  pc 00026720  /system/lib/libdvm.so 
  15. 10-27 21:19:52.988  8027  8027 D INJECT  : #11  pc 0002d790  /system/lib/libdvm.so (dvmMterpStd(Thread*)+76) 
  16. 10-27 21:19:52.988  8027  8027 D INJECT  : #12  pc 0002adf4  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JVa+184) 
  17. 10-27 21:19:52.988  8027  8027 D INJECT  : #13  pc 0005fd74  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, O+335) 
  18. 10-27 21:19:52.988  8027  8027 D INJECT  : #14  pc 000494c2  /system/lib/libdvm.so 
  19. 10-27 21:19:52.989  8027  8027 D INJECT  :   at com.android.webview.chromium.DrawGLFunctor.nativeDestroyGLFunctor(Native Method) 
  20. 10-27 21:19:52.989  8027  8027 D INJECT  :   at com.android.webview.chromium.DrawGLFunctor.access$000(DrawGLFunctor.java:31) 
  21. 10-27 21:19:52.989  8027  8027 D INJECT  :   at com.android.webview.chromium.DrawGLFunctor$DestroyRunnable.run(DrawGLFunctor.java:91) 
  22. 10-27 21:19:52.989  8027  8027 D INJECT  :   at com.android.org.chromium.content.common.CleanupReference.runCleanupTaskInternal(CleanupReference.java:159) 
  23. 10-27 21:19:52.989  8027  8027 D INJECT  :   at com.android.org.chromium.content.common.CleanupReference.access$300(CleanupReference.java:32) 
  24. 10-27 21:19:52.989  8027  8027 D INJECT  :   at com.android.org.chromium.content.common.CleanupReference$LazyHolder$1.handleMessage(CleanupReference.java:93) 
  25. 10-27 21:19:52.990  8027  8027 D INJECT  :   at com.android.org.chromium.content.common.CleanupReference.handleOnUiThread(CleanupReference.java:147) 
  26. 10-27 21:19:52.990  8027  8027 D INJECT  :   at com.android.org.chromium.content.common.CleanupReference.cleanupNow(CleanupReference.java:141) 
  27. 10-27 21:19:52.990  8027  8027 D INJECT  :   at com.android.webview.chromium.DrawGLFunctor.destroy(DrawGLFunctor.java:46) 
  28. 10-27 21:19:52.990  8027  8027 D INJECT  :   at com.android.webview.chromium.WebViewChromium.destroy(WebViewChromium.java:430) 
  29. 10-27 21:19:52.990  8027  8027 D INJECT  :   at android.webkit.WebView.destroy(WebView.java:667) 
  30. 10-27 21:19:52.990  8027  8027 D INJECT  :   at com.xiaomi.music.hybrid.HybridFragment.destroyHybridView(HybridFragment.java:64) 
  31. 10-27 21:19:52.990  8027  8027 D INJECT  :   at com.xiaomi.music.hybrid.HybridFragment.onDestroyView(HybridFragment.java:115) 
  32. 10-27 21:19:52.990  8027  8027 D INJECT  :   at com.miui.player.component.MusicBaseFragment.onDestroyView(MusicBaseFragment.java:216) 
  33. 10-27 21:19:52.991  8027  8027 D INJECT  :   at android.app.Fragment.performDestroyView(Fragment.java:1898) 
  34. 10-27 21:19:52.991  8027  8027 D INJECT  :   at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:954) 
  35. 10-27 21:19:52.991  8027  8027 D INJECT  :   at android.app.FragmentManagerImpl.removeFragment(FragmentManager.java:1167) 
  36. 10-27 21:19:52.991  8027  8027 D INJECT  :   at android.app.BackStackRecord.popFromBackStack(BackStackRecord.java:715) 
  37. 10-27 21:19:52.991  8027  8027 D INJECT  :   at android.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1544) 
  38. 10-27 21:19:52.992  8027  8027 D INJECT  :   at android.app.FragmentManagerImpl$3.run(FragmentManager.java:502) 
  39. 10-27 21:19:52.992  8027  8027 D INJECT  :   at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1449) 
  40. 10-27 21:19:52.992  8027  8027 D INJECT  :   at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443) 
  41. 10-27 21:19:52.992  8027  8027 D INJECT  :   at android.os.Handler.handleCallback(Handler.java:733) 
  42. 10-27 21:19:52.992  8027  8027 D INJECT  :   at android.os.Handler.dispatchMessage(Handler.java:95) 
  43. 10-27 21:19:52.992  8027  8027 D INJECT  :   at android.os.Looper.loop(Looper.java:136) 
  44. 10-27 21:19:52.993  8027  8027 D INJECT  :   at android.app.ActivityThread.main(ActivityThread.java:5016) 
  45. 10-27 21:19:52.993  8027  8027 D INJECT  :   at java.lang.reflect.Method.invokeNative(Native Method) 
  46. 10-27 21:19:52.993  8027  8027 D INJECT  :   at java.lang.reflect.Method.invoke(Method.java:515) 
  47. 10-27 21:19:52.993  8027  8027 D INJECT  :   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792) 
  48. 10-27 21:19:52.993  8027  8027 D INJECT  :   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608) 
  49. 10-27 21:19:52.993  8027  8027 D INJECT  :   at dalvik.system.NativeStart.main(Native Method) 
  50. 10-27 21:19:53.020  8027  8027 I OpenGLRenderer: functor=0x7a7b8530,vtbl=0x400fc1b8 

 

從log中可以看到,確實是在distroy view的時候釋放了Functor,而隨后再Renderer中又使用了這個Functor。

打印崩潰時的java調(diào)用棧如下:

  1. 10-27 21:19:53.274  8027  8027 I dalvikvm: "main" prio=5 tid=1 TIMED_WAIT10-27 21:19:53.279  8027  8027 I dalvikvm:   | group="main" sCount=0 dsCount=0 obj=0x41716ca8 self=0x415344f8 
  2. 10-27 21:19:53.279  8027  8027 I dalvikvm:   | sysTid=6895 nice=-6 sched=0/0 cgrp=apps handle=1074409812 
  3. 10-27 21:19:53.280  8027  8027 I dalvikvm:   | state=R schedstat=( 0 0 0 ) utm=184 stm=61 core=3 
  4. 10-27 21:19:53.280  8027  8027 I dalvikvm:   at android.view.GLES20Canvas.nDrawDisplayList(Native Method) 
  5. 10-27 21:19:53.281  8027  8027 I dalvikvm:   at android.view.GLES20Canvas.drawDisplayList(GLES20Canvas.java:420) 
  6. 10-27 21:19:53.281  8027  8027 I dalvikvm:   at android.view.HardwareRenderer$GlRenderer.drawDisplayList(HardwareRenderer.java:1709) 
  7. 10-27 21:19:53.281  8027  8027 I dalvikvm:   at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1525) 
  8. 10-27 21:19:53.282  8027  8027 I dalvikvm:   at android.view.ViewRootImpl.draw(ViewRootImpl.java:2475) 
  9. 10-27 21:19:53.282  8027  8027 I dalvikvm:   at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2347) 
  10. 10-27 21:19:53.283  8027  8027 I dalvikvm:   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1977) 
  11. 10-27 21:19:53.284  8027  8027 I dalvikvm:   at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1094) 
  12. 10-27 21:19:53.285  8027  8027 I dalvikvm:   at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5703) 
  13. 10-27 21:19:53.285  8027  8027 I dalvikvm:   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:764) 
  14. 10-27 21:19:53.286  8027  8027 I dalvikvm:   at android.view.Choreographer.doCallbacks(Choreographer.java:577) 
  15. 10-27 21:19:53.287  8027  8027 I dalvikvm:   at android.view.Choreographer.doFrame(Choreographer.java:547) 
  16. 10-27 21:19:53.288  8027  8027 I dalvikvm:   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:750) 
  17. 10-27 21:19:53.289  8027  8027 I dalvikvm:   at android.os.Handler.handleCallback(Handler.java:733) 
  18. 10-27 21:19:53.289  8027  8027 I dalvikvm:   at android.os.Handler.dispatchMessage(Handler.java:95) 
  19. 10-27 21:19:53.290  8027  8027 I dalvikvm:   at android.os.Looper.loop(Looper.java:136) 
  20. 10-27 21:19:53.291  8027  8027 I dalvikvm:   at android.app.ActivityThread.main(ActivityThread.java:5016) 
  21. 10-27 21:19:53.291  8027  8027 I dalvikvm:   at java.lang.reflect.Method.invokeNative(Native Method) 
  22. 10-27 21:19:53.292  8027  8027 I dalvikvm:   at java.lang.reflect.Method.invoke(Method.java:515) 
  23. 10-27 21:19:53.293  8027  8027 I dalvikvm:   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792) 
  24. 10-27 21:19:53.293  8027  8027 I dalvikvm:   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608) 
  25. 10-27 21:19:53.293  8027  8027 I dalvikvm:   at dalvik.system.NativeStart.main(Native Method) 

 

正常情況下,view在被destroy后不應(yīng)該再被繪制,通過跟孫念溝通,得知這種情況可能是view在destroy前沒有remove導(dǎo)致的。

分析代碼:

上面delete時的調(diào)用棧中有特別的兩行:

  1. 10-27 21:19:52.990  8027  8027 D INJECT  :   at com.xiaomi.music.hybrid.HybridFragment.destroyHybridView(HybridFragment.java:64) 
  2. 10-27 21:19:52.990  8027  8027 D INJECT  :   at com.xiaomi.music.hybrid.HybridFragment.onDestroyView(HybridFragment.java:115) 

 

這個是應(yīng)用的代碼,而這個問題只有在這個應(yīng)用上出現(xiàn)過,所以很可能是應(yīng)用的代碼引起的,

所以查了下opengrok中的代碼,發(fā)現(xiàn)有兩處destroyHybridView()的實現(xiàn):

  1. @v8-kk-pisces-alpha/packages/apps/MiuiMusic/common/music_sdk/hybrid/src/com/xiaomi/music/hybrid/HybridFragment.java 
  2.     private void destroyHybridView() { 
  3.         for (HybridView view : mHybridViews) { 
  4.             if (view != null) { 
  5.                 view.destroy(); 
  6.             } 
  7.         } 
  8.         mHybridViews.clear(); 
  9.     }  
  10.  
  11. @v8-kk-pisces-alpha/packages/apps/MiuiSdk/library/src/java/miui/hybrid/HybridFragment.java 
  12.     private void destroyHybridView() { 
  13.         for (HybridView view : mHybridViews) { 
  14.             if (view != null) { 
  15. =>              if (view.getParent() != null) { 
  16. =>                  ((ViewGroup) view.getParent()).removeView(view); 
  17. =>              } 
  18.                 view.destroy(); 
  19.             } 
  20.         } 
  21.         mHybridViews.clear(); 
  22.     } 

 

跟應(yīng)用的同事溝通后得知,音樂應(yīng)用是用上面的代碼,也就是沒有removeView的代碼。

將上面代碼中添加removeView的邏輯后不再復(fù)現(xiàn)問題。

雖然問題得到解決,但還不清楚為什么沒有removeView會導(dǎo)致野指針。

為了找到根源仔細(xì)閱讀了相關(guān)代碼,發(fā)現(xiàn)代碼中Render中有detachFunctor的代碼:

  1. class GLES20Canvas extends HardwareCanvas { 
  2.     ... 
  3.     public void detachFunctor(int functor) { 
  4.         nDetachFunctor(mRenderer, functor); 
  5.     } 

 

用studio在這個代碼中設(shè)置斷點(diǎn),得到如下調(diào)用棧:

  1. java.lang.Thread.State: RUNNABLE 
  2.       at android.view.GLES20Canvas.detachFunctor(GLES20Canvas.java:321) 
  3.       at android.view.HardwareRenderer$GlRenderer.detachFunctor(HardwareRenderer.java:1791) 
  4.       at android.view.ViewRootImpl.detachFunctor(ViewRootImpl.java:744) 
  5.       at com.android.webview.chromium.DrawGLFunctor$DestroyRunnable.detachNativeFunctor(DrawGLFunctor.java:97) 
  6.       at com.android.webview.chromium.DrawGLFunctor.detach(DrawGLFunctor.java:53) 
  7.       at com.android.webview.chromium.WebViewChromium.onDetachedFromWindow(WebViewChromium.java:1718) 
  8.       at android.webkit.WebView.onDetachedFromWindow(WebView.java:2108) 
  9.       at android.view.View.dispatchDetachedFromWindow(View.java:12631) 
  10.       at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2587) 
  11.       at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3845) 
  12.       at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3818) 
  13.       at android.view.ViewGroup.removeView(ViewGroup.java:3750) 
  14.       at com.xiaomi.music.hybrid.HybridFragment.destroyHybridView(HybridFragment.java:66) 
  15.       at com.xiaomi.music.hybrid.HybridFragment.onDestroyView(HybridFragment.java:119) 
  16.       at com.miui.player.component.MusicBaseFragment.onDestroyView(MusicBaseFragment.java:216) 
  17.       at android.app.Fragment.performDestroyView(Fragment.java:1898) 
  18.       at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:954) 
  19.       at android.app.FragmentManagerImpl.removeFragment(FragmentManager.java:1167) 
  20.       at android.app.BackStackRecord.popFromBackStack(BackStackRecord.java:715) 
  21.       at android.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1544) 
  22.       at android.app.FragmentManagerImpl$3.run(FragmentManager.java:502) 
  23.       at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1449) 
  24.       at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443) 
  25.       at android.os.Handler.handleCallback(Handler.java:733) 
  26.       at android.os.Handler.dispatchMessage(Handler.java:95) 
  27.       at android.os.Looper.loop(Looper.java:136) 
  28.       at android.app.ActivityThread.main(ActivityThread.java:5016) 
  29.       at java.lang.reflect.Method.invokeNative(Method.java:-1) 
  30.       at java.lang.reflect.Method.invoke(Method.java:515) 
  31.       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792) 
  32.       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608) 
  33.       at dalvik.system.NativeStart.main(NativeStart.java:-1) 

 

加了removeView后,會從Render中刪除Functor,這樣Render在繪制時,不再調(diào)用這個Functor。

這個問題只會在KK上有,L以后對Render做的很大改動,即使不做removeView,也不會存在野指針問題。

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

 

責(zé)任編輯:龐桂玉 來源: 小米開放平臺
相關(guān)推薦

2016-11-24 15:03:58

JAVANATIVE野指針

2021-08-06 13:48:53

C語言野指針內(nèi)存

2023-12-26 12:13:31

野指針C++編程

2023-05-29 18:33:30

得物H5容器

2021-07-29 20:28:24

靜態(tài)代碼Hdfs

2017-05-03 16:26:24

MySQL并發(fā)死鎖

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

結(jié)構(gòu)C代碼賦值

2016-09-08 16:16:26

iOS移動應(yīng)用內(nèi)存泄漏

2025-02-14 08:59:09

2018-04-10 13:02:51

HBase寫入流程數(shù)據(jù)

2014-06-04 09:34:36

2025-01-08 08:47:44

Node.js內(nèi)存泄露定時器

2024-01-03 16:39:07

2022-11-03 16:10:29

groovyfullGC

2024-04-25 10:06:03

內(nèi)存泄漏

2010-09-14 10:41:59

無線網(wǎng)絡(luò)配置

2010-06-29 12:42:05

UDP協(xié)議Java
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

欧美日韩亚州综合| 国产清纯在线一区二区www| 欧美区在线播放| av在线播放网址| 日韩在线免费| 一区二区三区在线视频观看58| caoporn国产精品免费公开| 日本视频www| 欧美偷拍综合| 欧美电视剧在线看免费| 116极品美女午夜一级| 波多野结衣在线影院| 国产一区二区看久久| 午夜精品一区二区三区在线| 国产免费无遮挡吸奶头视频| 日本成人精品| 色菇凉天天综合网| 少妇久久久久久被弄到高潮| 国内精品一区视频| 国产成人免费视频| 日本免费一区二区三区视频观看| 国产人妻精品一区二区三区不卡| 久久草在线视频| 欧美美女黄视频| 草草久久久无码国产专区| 欧美日本一道| 久久久高清一区二区三区| 4444kk亚洲人成电影在线| 国产又粗又猛又爽又| 黄色成人在线网址| 日韩视频亚洲视频| 国产肥白大熟妇bbbb视频| 精品一区二区三区中文字幕 | 日韩三级精品电影久久久| 欧美亚洲另类色图| 黄色在线观看视频网站| 国产精品久久精品日日| 欧美一级日本a级v片| 欧美一级在线免费观看| 国产美女精品人人做人人爽| 国产精品高清网站| av黄色在线播放| 国产一区二区中文| 久久国产精品久久国产精品| 国产在视频线精品视频| 国产精品免费不| 国产视频精品自拍| 国产不卡一二三| 91精品入口| 日韩欧美一区在线观看| а 天堂 在线| 外国成人毛片| 欧美三级在线看| 香蕉视频禁止18| 先锋欧美三级| 欧美羞羞免费网站| 日本va中文字幕| 日韩精品第一| 欧美日韩精品电影| wwwwwxxxx日本| 日韩美女在线| 91精品欧美一区二区三区综合在| 红桃av在线播放| 在线成人av观看| 一本久久a久久精品亚洲| 欧美一级在线看| 中文不卡1区2区3区| 动漫精品一区二区| 免费高清一区二区三区| 国产美女一区视频| 婷婷夜色潮精品综合在线| 亚洲熟女乱色一区二区三区| 韩国美女久久| 欧美三级视频在线观看| 亚洲视频第二页| 国产午夜精品一区在线观看| 日韩欧美国产综合一区 | 久久人妻免费视频| 日韩国产欧美视频| 成人写真视频福利网| 亚洲精品免费在线观看视频| 不卡的av电影在线观看| 欧美一区1区三区3区公司 | 欧美一区二区三区红桃小说| 国产婷婷色综合av蜜臀av| japanese中文字幕| 久久在线免费| 欧美人与物videos| 国产一级精品视频| 日韩av电影一区| 亚洲综合色激情五月| 欧美一区,二区| 国产女人18水真多18精品一级做| 天天做天天爱天天高潮| 91九色在线播放| 欧美系列亚洲系列| 性折磨bdsm欧美激情另类| 欧美wwwwww| 久久精品这里热有精品| 国产精品a成v人在线播放| 老牛影视一区二区三区| 国产精品天美传媒沈樵| 欧美日韩国产综合在线| 91欧美在线视频| 夜夜精品浪潮av一区二区三区| 成人av一级片| 亚洲一区有码| 亚洲老头同性xxxxx| 可以免费看av的网址| 亚洲另类视频| 91亚洲国产成人久久精品网站| 亚洲色图21p| 亚洲天堂成人网| 青青草原av在线播放| 懂色av色香蕉一区二区蜜桃| 亚洲欧美色图片| 国产一级在线播放| 加勒比av一区二区| 欧美一区二区三区电影在线观看| 日本高清在线观看视频| 欧美亚洲一区三区| 国产精品久久AV无码| 一本到12不卡视频在线dvd| 国产91色在线| 亚洲欧美国产高清va在线播放| 国产片一区二区| 午夜精品久久久久久久无码| 日本一区二区三区视频在线看| 国产一区二区三区精品久久久| 国产无套在线观看| 国产精品1区二区.| 国产又黄又爽免费视频| 日韩影片中文字幕| 亚洲精品一区二区三区婷婷月| 青娱乐国产盛宴| 国产真实乱子伦精品视频| 日韩精品国内| 欧美影视资讯| 亚洲天堂网站在线观看视频| 日韩欧美三级视频| 成人一区二区三区在线观看 | 黄色av成人| 99久久久精品免费观看国产| 操你啦在线视频| 91精品国产一区二区三区香蕉| 久久精品在线观看视频| 麻豆精品一二三| 性欧美大战久久久久久久免费观看| 亚洲欧洲日本韩国| 亚洲老头同性xxxxx| www.国产一区二区| 久久精品视频免费| 成年人视频在线免费| 亚洲va久久久噜噜噜久久| 午夜精品一区二区三区av| 婷婷在线观看视频| 精品福利一区二区| 亚洲第一成人网站| 日韩中文字幕区一区有砖一区| 日本一区网站| 精品176极品一区| 日韩在线视频一区| 国产精品国产一区二区三区四区 | 亚洲三级一区| 99精品国产九九国产精品| 精品久久久91| 成人福利小视频| 亚洲第一主播视频| 中文字幕一区二区三区人妻| 日韩av电影天堂| youjizz.com亚洲| 18国产精品| 97视频在线免费观看| 牛牛澡牛牛爽一区二区| 欧美日韩视频在线一区二区| 伊人在线视频观看| 成人丝袜高跟foot| 男人靠女人免费视频网站| 国产成人3p视频免费观看| 国产欧美在线看| 国内高清免费在线视频| 日韩精品在线看| 亚洲永久精品视频| 亚洲综合色区另类av| 国产精品无码永久免费不卡| 日韩成人免费电影| 日本一级黄视频| 久久av免费| 91精品国产91久久久久青草| 午夜影视一区二区三区| 中文字幕久久久av一区| 亚洲AV无码国产精品午夜字幕| 欧美日韩久久久久| 欧美a级片免费看| av一区二区三区黑人| 中文字幕天天干| 亚洲黄色av| 亚洲欧洲日夜超级视频| caoporn成人| 国产精品网址在线| а√在线中文网新版地址在线| 亚洲视频国产视频| 亚洲AV无码精品色毛片浪潮| 欧洲国内综合视频| 精品无码av在线| 国产精品久久久爽爽爽麻豆色哟哟| 中文字幕一区二区三区人妻在线视频| 天堂午夜影视日韩欧美一区二区| 国产欧美精品aaaaaa片| 日韩精品免费一区二区在线观看 | 欧美一级淫片aaaaaa| 欧美日韩国产区一| 久久精品无码av| 一区二区在线观看免费| 亚洲精品国产精品国自| 91麻豆国产精品久久| 人妻激情偷乱视频一区二区三区| 日韩高清在线不卡| 免费在线观看视频a| 天天超碰亚洲| 亚洲成人18| 天堂99x99es久久精品免费| 5g国产欧美日韩视频| 日本午夜免费一区二区| 国产91在线播放精品91| 国产自产自拍视频在线观看| 色综合久综合久久综合久鬼88 | 国产欧美日韩在线视频| 亚洲成人av免费在线观看| 国产999精品久久久久久绿帽| 91女神在线观看| 日本在线不卡视频| 乱子伦视频在线看| 亚洲欧美日韩国产一区| 毛片在线播放视频| 在线成人av| 国产美女永久无遮挡| 欧美一区精品| 日韩视频在线观看视频| 国产精品久久久久一区二区三区厕所| 日韩videos| 激情综合网站| 日韩动漫在线观看| 成人av国产| 亚洲精品在线视频观看| 国产亚洲欧美日韩在线观看一区二区| 久久av免费一区| 欧美日韩一区二区三区在线电影| 国产精品一区二区欧美黑人喷潮水| 无码国模国产在线观看| 成人18视频| 中文无码日韩欧| 国产精品免费观看高清| 欧美美女黄色| 免费av在线一区二区| 国产91久久精品一区二区| 日本日本精品二区免费| 郴州新闻综合频道在线直播| 亚洲春色在线视频| 四季av在线一区二区三区| 黄瓜视频免费观看在线观看www| 天天操夜夜操国产精品| 韩国无码av片在线观看网站| 亚洲午夜视频| 国产在线青青草| 人人精品人人爱| 国产乱码一区二区三区四区| 懂色av噜噜一区二区三区av| 亚洲蜜桃精久久久久久久久久久久| 久久一夜天堂av一区二区三区| 日韩女同一区二区三区| 亚洲欧洲美洲综合色网| 久久综合成人网| 欧美性色视频在线| 亚洲天堂中文字幕在线| 精品区一区二区| 免费国产在线观看| 少妇精69xxtheporn| 人妖欧美1区| 日本不卡高字幕在线2019| 欧美videos粗暴| 国产a一区二区| 九九久久电影| 麻豆一区二区三区在线观看| 亚洲视频成人| 在线观看免费av网址| 国产成a人亚洲| 日本少妇xxxxx| 一区二区三区丝袜| 激情五月婷婷网| 欧美一区二区福利视频| 欧美女子与性| 久久这里有精品| 波多野结衣久久精品| 91久久精品久久国产性色也91| 国产精品男女| 午夜精品一区二区在线观看| 伊人久久成人| 99国产精品久久久久久| 91亚洲精品久久久蜜桃网站| av在线免费播放网址| 亚洲va天堂va国产va久| 一本到在线视频| 亚洲美女av黄| 欧美极品少妇videossex| 国产精品亚洲精品| 婷婷精品在线观看| 少妇大叫太大太粗太爽了a片小说| 久久精品天堂| 国产黑丝一区二区| 亚洲免费在线电影| 欧美成人一区二区视频| 亚洲精品一区二区精华| 黄色视屏免费在线观看| 国产成人精品免费视频| 成人偷拍自拍| 正在播放久久| 免费人成精品欧美精品| 在线免费观看成年人视频| 亚洲精品成人精品456| 亚洲性在线观看| 亚洲欧洲在线免费| 韩国精品一区| 国产一区二区在线观看免费播放| 一区二区日韩欧美| 美女网站色免费| 久久久久久久国产精品影院| 国产在线一区视频| 日韩一级片在线播放| 男人的天堂在线视频免费观看 | 国产农村妇女精品| 亚洲欧美日韩激情| 日韩电影免费观看中文字幕| 国产第一页在线视频| 亚洲最大激情中文字幕| 婷婷综合久久| 一区二区免费av| 国产精品乱码一区二区三区软件 | 欧美hdxxxxx| 91国产在线播放| 午夜日韩在线| 在线观看你懂的视频| 亚洲欧美另类在线| 国产精品一区二区黑人巨大| 在线日韩日本国产亚洲| 日韩一区二区三区免费| 日本一区二区三区精品视频| 美女国产精品| 日本爱爱爱视频| 欧美日韩一区二区欧美激情| 在线播放日本| 91精品免费看| 欧美不卡一区| 88av在线播放| 国产老头老太做爰视频| 91麻豆精品国产91久久久更新时间| 免费a级毛片在线播放| 91久久嫩草影院一区二区| 欧美1区3d| 日本五十肥熟交尾| 色综合久久久久久久久| 国产51人人成人人人人爽色哟哟| 国产精品久久久久久久久久东京| 成人高清电影网站| 亚洲欧美一区二区三区不卡| 一级精品视频在线观看宜春院| 国产 日韩 欧美 综合| 欧美亚洲成人免费| 日韩电影免费网站| www.日本久久| 亚洲高清免费观看高清完整版在线观看| 欧美一区二区黄片| 秋霞av国产精品一区| 手机亚洲手机国产手机日韩| 天堂av.com| 五月天欧美精品| av在线三区| 5g影院天天爽成人免费下载| 国产视频欧美| 91麻豆制片厂| 欧美mv日韩mv国产| japanese23hdxxxx日韩 | 99国产精品久久久久久久 | 人妻精品无码一区二区| 国产成人精品日本亚洲专区61| 国产精品毛片一区二区在线看| 性猛交╳xxx乱大交| 在线看日本不卡| 在线看福利影| 区一区二区三区中文字幕| 狠狠色伊人亚洲综合成人| 日韩精品在线免费看| 中文字幕成人在线| 99久久免费精品国产72精品九九| 99久久国产宗和精品1上映| 亚洲精品中文在线影院| 免费福利在线观看| av一区和二区| 日本免费新一区视频| 日本熟妇成熟毛茸茸|