精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

久久av二区| 九九热这里只有在线精品视| 无码人妻丰满熟妇区五十路百度| 国产三级在线看| 久久国产精品免费| 欧美精品久久久久久久| 91网站免费入口| 999精品视频在线观看| 午夜视频一区在线观看| 视频一区二区三区在线观看 | 欧美日韩中文字幕在线视频| 日韩欧美在线一区二区| www.五月婷| 亚洲免费在线视频观看| 九九免费精品视频在线观看| 欧美午夜精品免费| 国产欧美日韩小视频| 91在线观看| 99久久精品99国产精品 | 亚洲视频自拍| 精品女同一区二区三区在线播放| 亚洲一区二区三区免费观看| 手机看片国产1024| 国产一区二三区好的| 日本韩国在线不卡| 黄色一级视频免费| 国产精品福利在线观看播放| 亚洲精品综合精品自拍| 国产精九九网站漫画| 欧美韩国亚洲| 欧美日韩国产一区二区| 欧美一区二区视频在线播放| 午夜在线视频播放| 26uuu色噜噜精品一区| 91在线精品观看| 国产精品高潮呻吟AV无码| 久久动漫亚洲| 91高清视频免费观看| 国产亚洲精品成人| 欧美va亚洲va日韩∨a综合色| 一区二区三区国产在线观看| 欧美 变态 另类 人妖| 亚洲国产一区二区三区网站| 666欧美在线视频| 一女二男3p波多野结衣| 电影亚洲一区| 欧美在线观看一区| 日韩有码免费视频| 91av亚洲| 色狠狠av一区二区三区| 夫妻免费无码v看片| av在线视屏| 亚洲高清免费观看| 青青草国产精品视频| 高清电影在线免费观看| 亚洲永久免费视频| 亚洲理论电影在线观看| 97在线超碰| 欧美日韩国产色| 日本女优爱爱视频| 99久久er| 欧美精品一级二级| 免费人成视频在线播放| 涩涩屋成人免费视频软件| 日韩欧美一区二区三区在线| 熟妇女人妻丰满少妇中文字幕| 精品久久亚洲| 欧美精品一区二区久久久| 久久性爱视频网站| 免费av一区| 国产一区二区三区免费视频| 毛片久久久久久| 国产精品成人av| 欧美激情视频网| 一级片中文字幕| 日韩精品一级二级 | 国产偷人爽久久久久久老妇app| 日本视频一区二区三区| 国产在线拍偷自揄拍精品| 国产三级午夜理伦三级| 成人免费三级在线| 欧美日韩亚洲在线| 欧美成人xxx| 亚洲在线视频一区| 情侣黄网站免费看| 伊人久久综合网另类网站| 日韩精品专区在线影院重磅| 色综合久久五月| 国产一区二区亚洲| 久久国产精品免费视频| 亚洲 欧美 日韩 综合| 免费在线一区观看| 91丝袜脚交足在线播放| 青草久久伊人| 亚洲免费高清视频在线| 国产中文字幕二区| 国产91精品在线| 亚洲精品一线二线三线无人区| 三上悠亚影音先锋| 欧美在线网站| 国产mv久久久| 亚洲精品中文字幕成人片| 国产午夜亚洲精品羞羞网站| av中文字幕av| 亚洲精品一区三区三区在线观看| 日韩欧美你懂的| 夫妇露脸对白88av| 亚洲精选在线| 成人xxxx视频| 国产一区电影| 午夜精品久久久久久久蜜桃app| 性chinese极品按摩| 林ゆな中文字幕一区二区| 日日狠狠久久偷偷四色综合免费| 日本三级小视频| 国产一区二区电影| 性欧美大战久久久久久久免费观看| 久久av色综合| 欧美色爱综合网| 男生裸体视频网站| 国产精品多人| 亚洲一区二区三区香蕉| 第一页在线观看| 精品久久久香蕉免费精品视频| 少妇高潮一69aⅹ| 成人影院在线| 日本欧美爱爱爱| 亚洲成熟女性毛茸茸| 成人免费在线视频观看| 国产又大又黄又粗的视频| 亚洲自拍都市欧美小说| 97色伦亚洲国产| 国模无码一区二区三区| 亚洲欧美日韩国产综合| av在线网址导航| 精品久久久久久久久久久下田| 97视频在线观看免费高清完整版在线观看| 国产欧美日韩成人| 中文字幕五月欧美| 天堂网在线免费观看| 精品产国自在拍| 热久久免费视频精品| 五月婷中文字幕| 精品福利视频导航| 人妻无码中文久久久久专区| 极品日韩av| 国产精品一区二区三区不卡| 里番在线播放| 亚洲成人亚洲激情| 日韩精品人妻中文字幕| k8久久久一区二区三区| 人妻少妇精品无码专区二区| 国产精品天天看天天狠| 欧美激情一区二区三区久久久| 午夜精品久久久久久久爽| 亚洲激情综合网| 国产大尺度视频| 亚洲国产高清一区二区三区| 国产一区二区三区奇米久涩| 美女的胸无遮挡在线观看| 亚洲精品国偷自产在线99热| 久久久国产高清| 久久影院午夜片一区| aa在线免费观看| 精品国产91| 国产精品一区二区久久| 黄色网页网址在线免费| 欧美成人一区二区三区片免费| 久久机热这里只有精品| 99久久综合狠狠综合久久| 欧美a在线视频| 成人在线丰满少妇av| 亚洲精品免费av| 国产福利电影在线播放| 亚洲天堂网站在线观看视频| 一级成人免费视频| 一二三区精品福利视频| 草草地址线路①屁屁影院成人| 日韩高清一级片| 午夜在线视频免费观看| 国偷自产视频一区二区久| 2021国产精品视频| 91在线免费看| 亚洲第一色在线| 日韩欧美国产另类| 亚洲精品视频在线| 亚洲激情视频小说| 国产一区美女在线| 国产主播在线看| 91成人免费| 免费成人在线观看av| 婷婷久久综合九色综合99蜜桃| 久久久免费精品| 国产精品久久一区二区三区不卡| 91精品国产91久久久久久一区二区| 日韩欧美视频在线免费观看| 国产精品五月天| 日本50路肥熟bbw| 蜜桃一区二区三区在线观看| 丰满少妇大力进入| 欧美国产一区二区三区激情无套| 国产欧美一区二区三区另类精品| 成人国产精品| 97人人爽人人喊人人模波多 | 欧美激情视频网址| 岛国在线大片| 亚洲精品按摩视频| 国产精品久久久久久久久久久久久久久久久久 | 内射一区二区三区| 久久亚洲欧美国产精品乐播 | 久久天堂电影网| 青青青手机在线视频观看| 欧美一区二区视频网站| 欧美特级黄色片| 精品久久久久久久中文字幕 | 国产在线日韩| 最新精品视频| 欧美日韩有码| 蜜桃麻豆91| 国产精品xxxav免费视频| 92看片淫黄大片欧美看国产片| 偷拍视频一区二区三区| 久久噜噜噜精品国产亚洲综合| 麻豆av在线免费看| 在线精品国产成人综合| 蜜桃成人在线视频| 亚洲娇小xxxx欧美娇小| 精品人妻少妇AV无码专区| 欧美日韩国产123区| 青青草视频在线观看免费| 亚洲h动漫在线| 国产真实乱人偷精品视频| 亚洲精品欧美激情| 国精产品一区一区二区三区mba| 国产亚洲成aⅴ人片在线观看 | 欧美成人基地| 国产精品一区二区三区免费观看| 国产中文欧美日韩在线| 国产日产亚洲精品| 日韩高清不卡| 国产精品精品视频一区二区三区| 成人av三级| 欧美洲成人男女午夜视频| 91在线三级| 国语自产精品视频在线看| 高清电影在线免费观看| 国模精品视频一区二区三区| heyzo高清在线| 97精品国产97久久久久久| 久久亚洲资源| 91精品国产99| 北岛玲heyzo一区二区| 奇米四色中文综合久久| 粉嫩一区二区三区| 国产精品日日做人人爱| 欧洲精品久久久久毛片完整版| 国产精品男女猛烈高潮激情| 992tv国产精品成人影院| 91精品久久久久久久久久久久久久| 国产成人精品一区二区三区视频| 国产美女久久久| 国产美女视频一区二区| 北条麻妃高清一区| 老汉色老汉首页av亚洲| 久久香蕉综合色| 精品国产成人| 亚洲免费视频播放| 在线日韩中文| 成年人黄色片视频| 奇米精品一区二区三区在线观看 | 国产主播第一页| 欧美色网站导航| www.成人在线观看| 亚洲国产又黄又爽女人高潮的| 在线观看xxx| 中文字幕亚洲一区二区三区| 黄网站在线免费看| 久久乐国产精品| 草民电影神马电影一区二区| 亚洲www视频| 欧美成人一区在线观看| 亚洲欧美久久234| 国产精品激情| 午夜精品久久久内射近拍高清| 久久精品72免费观看| 亚洲美女精品视频| 日本一区二区免费在线观看视频| 成人在线观看小视频| 亚洲网友自拍偷拍| 欧美高清69hd| 精品国产免费一区二区三区香蕉| 九一国产在线| 欧美日本中文字幕| yw.尤物在线精品视频| av成人午夜| 精品国产91| 你真棒插曲来救救我在线观看| 久久婷婷丁香| 师生出轨h灌满了1v1| 久久精品欧美日韩| 青青草原国产视频| 在线观看成人免费视频| 成人乱码一区二区三区| 中文字幕不卡在线视频极品| 视频在线观看入口黄最新永久免费国产| 91av免费观看91av精品在线| 国产精品久久久久久久久久辛辛| 精品一区二区三区日本| 在线精品国产| 伊人国产在线视频| 91蜜桃传媒精品久久久一区二区| 日韩在线观看免| 色菇凉天天综合网| 五月婷婷久久久| 欧美日韩不卡合集视频| 国产成人久久精品麻豆二区| 久久国产精品 国产精品| 欧美精品不卡| 四季av一区二区三区| www国产成人| 久久精品无码人妻| 欧美电视剧在线看免费| 免费黄色网址在线观看| 国产成人精品视频在线| 日韩在线麻豆| 激情五月婷婷六月| 国产精品一区三区| 三级黄色免费观看| 欧美一a一片一级一片| 精品久久久久一区二区三区| 91精品国产91久久久久久最新 | 成人小电影网站| 韩国成人一区| 亚洲香蕉网站| 蜜桃色一区二区三区| 亚洲欧美日韩在线播放| 国产又粗又猛又黄| 中文国产亚洲喷潮| av免费在线一区| 日韩欧美精品一区二区三区经典| 久久激情综合| 熟女高潮一区二区三区| 一本色道久久综合狠狠躁的推荐| 无码精品视频一区二区三区| 国内精品一区二区三区| 亚洲无线观看| 成人一级生活片| 99re成人精品视频| 久草手机在线观看| 亚洲精品小视频| 免费亚洲电影| 亚洲国产一区二区三区在线播| 日本91福利区| 成人无码精品1区2区3区免费看 | 丰满人妻妇伦又伦精品国产| 欧美超级乱淫片喷水| 欧美一级片网址| 国产精品视频二| 成人精品一区二区三区中文字幕| 久久精品性爱视频| 精品一区二区三区电影| 日韩av首页| 一区精品在线| 国产成人免费在线观看| 国产无套内射又大又猛又粗又爽| 亚洲第一偷拍网| 久九九久频精品短视频| 亚洲精品无人区| 国内精品免费在线观看| 久久国产精品波多野结衣| 亚洲国产日韩精品在线| 日韩av大片站长工具| 中文字幕久久综合| 国产精品一级片在线观看| 日本免费在线播放| 亚洲片av在线| 成人久久精品| 男人日女人下面视频| 中文字幕欧美国产| а√中文在线资源库| 91av视频在线播放| 99久久影视| 午夜免费福利影院| 欧美伊人久久大香线蕉综合69 | 一区二区三区四区不卡在线| 日本成人动漫在线观看| 国产精品wwwwww| 韩国av一区| 色欲狠狠躁天天躁无码中文字幕| 欧美精品第一页| 国产自产自拍视频在线观看| 亚洲成人自拍视频| 成人久久视频在线观看| 亚洲熟妇无码久久精品| 欧美精品久久久久久久久久| 一区二区三区韩国免费中文网站| 国产传媒免费观看| 欧美视频13p| 三级网站视频在在线播放| 日本成人黄色|