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

Android 12 疑難崩潰解決之路

移動(dòng)開發(fā) Android
UC內(nèi)核在Android 12上發(fā)現(xiàn)一個(gè)致命的崩潰。約有10%的用戶在冷啟動(dòng)的時(shí)候會(huì)遇到這個(gè)問題,嚴(yán)重影響了UC內(nèi)核的發(fā)布。

UC內(nèi)核在Android 12上發(fā)現(xiàn)一個(gè)致命的崩潰。約有10%的用戶在冷啟動(dòng)的時(shí)候會(huì)遇到這個(gè)問題,嚴(yán)重影響了UC內(nèi)核的發(fā)布。它的調(diào)用棧是這樣的:

10-12 19:03:21.461  1038  2723 I id.AlipayGphon: Rejecting re-init on previously-failed class java.lang.Class<com.uc.webkit.impl.WebViewChromiumFactoryProvider>: java.lang.VerifyError: Verifier rejected class com.uc.webkit.impl.WebViewChromiumFactoryProvider: com.uc.webkit.an com.uc.webkit.impl.WebViewChromiumFactoryProvider.g() failed to verify: com.uc.webkit.an com.uc.webkit.impl.WebViewChromiumFactoryProvider.g(): [0x15]  can't resolve returned type 'Unresolved Reference: com.uc.webkit.an' or 'Unresolved Reference: com.uc.webkit.impl.ak' (declaration of 'com.uc.webkit.impl.WebViewChromiumFactoryProvider' appears in /data/user/0/com.eg.android.AlipayGphone/app_h5container/uc/3.22.2.28.21092218119_64/so/core.jar)
10-12 19:03:21.461 1038 2723 I id.AlipayGphon: (Throwable with empty stack trace)
10-12 19:03:21.464 1038 2723 E WebViewEntry: init error and prepare native crash
10-12 19:03:21.464 1038 2723 E WebViewEntry: java.lang.NoClassDefFoundError: com.uc.webkit.impl.WebViewChromiumFactoryProvider
10-12 19:03:21.464 1038 2723 E WebViewEntry: at com.uc.webkit.impl.WebViewChromiumFactoryProvider.i(Unknown Source:0)
10-12 19:03:21.464 1038 2723 E WebViewEntry: at com.uc.webkit.WebViewEntry.p(U4Source:193)
10-12 19:03:21.464 1038 2723 E WebViewEntry: at com.uc.webkit.bg.run(Unknown Source:0)
10-12 19:03:21.464 1038 2723 E WebViewEntry: at android.os.Handler.handleCallback(Handler.java:938)
10-12 19:03:21.464 1038 2723 E WebViewEntry: at android.os.Handler.dispatchMessage(Handler.java:99)
10-12 19:03:21.464 1038 2723 E WebViewEntry: at android.os.Looper.loopOnce(Looper.java:201)
10-12 19:03:21.464 1038 2723 E WebViewEntry: at android.os.Looper.loop(Looper.java:288)
10-12 19:03:21.464 1038 2723 E WebViewEntry: at android.os.HandlerThread.run(HandlerThread.java:67)
10-12 19:03:21.464 1038 2723 E WebViewEntry: Caused by: java.lang.VerifyError: Verifier rejected class com.uc.webkit.impl.WebViewChromiumFactoryProvider: com.uc.webkit.an com.uc.webkit.impl.WebViewChromiumFactoryProvider.g() failed to verify: com.uc.webkit.an com.uc.webkit.impl.WebViewChromiumFactoryProvider.g(): [0x15] can't resolve returned type 'Unresolved Reference: com.uc.webkit.an' or 'Unresolved Reference: com.uc.webkit.impl.ak' (declaration of 'com.uc.webkit.impl.WebViewChromiumFactoryProvider' appears in /data/user/0/com.eg.android.AlipayGphone/app_h5container/uc/3.22.2.28.21092218119_64/so/core.jar)

不解決這個(gè)問題我們的內(nèi)核可能無(wú)法在Android 12上啟用了,對(duì)于內(nèi)核來(lái)說(shuō)又是一個(gè)生死攸關(guān)的問題。這個(gè)問題正常操作無(wú)法重現(xiàn),只能通過(guò)monkey瘋狂冷啟動(dòng)才能偶現(xiàn)。

另外一個(gè)背景是UC瀏覽器把sdk level提高到了30才引發(fā)這個(gè)問題。

調(diào)用棧分析

從調(diào)用棧的信息我們看到最頂層的Error是NoClassDefFoundError,但他是由下面的VerifyError引起的。這個(gè)調(diào)用棧顯示正在進(jìn)行正常的啟動(dòng)過(guò)程。

Rejecting re-init on previously-failed class 顯示com.uc.webkit.impl.WebViewChromiumFactoryProvider應(yīng)該已經(jīng)嘗試過(guò)Verify,但是Error了。按照常理應(yīng)該還有一個(gè)VerifyError的拋出。但找了多個(gè)崩潰日志都沒有發(fā)現(xiàn)第一次VerifyError拋出的位置。

另外,這個(gè)VerifyError的 Caused by: java.lang.VerifyError位置應(yīng)該后面還跟著它第一次Verify的調(diào)用棧,但它卻顯示(Throwable with empty stack trace)。

黑科技分析:手段一

帶著上述的諸多疑問,我們發(fā)現(xiàn)目前的數(shù)據(jù)不足以我們進(jìn)行分析,我們需要更多的和Verify有關(guān)的信息才能處理問題。

Android的art虛擬機(jī)是帶著verbose log的。它是按照模塊分類的,平時(shí)不會(huì)打開。需要啟動(dòng)art的時(shí)候通過(guò)傳參讓它打開。

我們嘗試了wrapper技術(shù),即在lib目錄加上文件wrapper.sh,系統(tǒng)就會(huì)用wrapper.sh啟動(dòng)虛擬機(jī),而不是通過(guò)Zygote。很遺憾這個(gè)手段沒有作用,分析了AndroidRuntime.cpp里面的源碼后,我們發(fā)現(xiàn)wrapper傳入的虛擬機(jī)參賽會(huì)被它過(guò)濾掉,完全無(wú)視。

我們只能使用正經(jīng)途徑之外的方法了。

上圖是Verbose log的結(jié)構(gòu),我們看到有個(gè)全局變量gLogVerbosity控制這它們的開關(guān)。我們能不能通過(guò)修改gLogVerbosity達(dá)到啟動(dòng)verbose log的目的?

UC內(nèi)核有著一系列強(qiáng)大的黑科技組合。適應(yīng)這種需求的黑科技是symbol_resolver模塊。這個(gè)技術(shù)能夠從/proc/self/maps文件里面分析指名的so映射的位置,并通過(guò)elf解析拿到所有的符號(hào),然后我們就能夠從Key-Value對(duì)里面找到想要的符號(hào)的位置。

用這個(gè)技術(shù)我們很快定位了libart.so里面的gLogVerbosity位置,并且當(dāng)作一個(gè)bool數(shù)組把verifier和verifier_debug項(xiàng)置為true。于是我們有了新的log:

Verification failed on class org.chromium.ui.base.WindowAndroid in /data/user/0/com.eg.android.AlipayGphone/app_h5container/uc/3.22.2.31.10191532_64/so/core.jar because: Verifier rejected class org.chromium.ui.base.WindowAndroid: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken() failed to verify: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken(): [0x10]  can't resolve returned type 'Unresolved Reference: android.os.IBinder' or 'Reference: android.os.IBinder'
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x0] : Processing const/4 v1, #+0
0:[Undefined],1:[Undefined],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x1] : Processing iget-object v0, v2, Ljava/lang/ref/WeakReference; org.chromium.ui.base.WindowAndroid.e // field@7982
0:[Undefined],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x3] : Processing invoke-virtual {v0}, java.lang.Object java.lang.ref.WeakReference.get() // method@7347
0:[Reference: java.lang.ref.WeakReference],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x6] : Processing move-result-object v0
0:[Reference: java.lang.ref.WeakReference],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x7] : Processing check-cast v0, android.content.Context // type@TypeIndex[61]
0:[Reference: java.lang.Object],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x9] : Processing invoke-static {v0}, android.app.Activity org.chromium.ui.base.WindowAndroid.a(android.content.Context) // method@17017
0:[Reference: android.content.Context],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0xc] : Processing move-result-object v0
0:[Reference: android.content.Context],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0xd] : Processing if-nez v0, +4
0:[Reference: android.app.Activity],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0xf] : Processing move-object v0, v1
0:[Reference: android.app.Activity],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x10] : Processing return-object v0
0:[Zero/null],1:[Conflict],2:[Conflict],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x11] : Processing invoke-virtual {v0}, android.view.Window android.app.Activity.getWindow() // method@26
0:[Reference: android.app.Activity],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x14] : Processing move-result-object v0
0:[Reference: android.app.Activity],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x15] : Processing if-nez v0, +4
0:[Reference: android.view.Window],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x17] : Processing move-object v0, v1
0:[Reference: android.view.Window],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x18] : Processing goto -8
0:[Zero/null],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x19] : Processing invoke-virtual {v0}, android.view.View android.view.Window.peekDecorView() // method@1459
0:[Reference: android.view.Window],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x1c] : Processing move-result-object v0
0:[Reference: android.view.Window],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x1d] : Processing if-nez v0, +4
0:[Reference: android.view.View],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x1f] : Processing move-object v0, v1
0:[Reference: android.view.View],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x20] : Processing goto -16
0:[Zero/null],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x21] : Processing invoke-virtual {v0}, android.os.IBinder android.view.View.getWindowToken() // method@1318
0:[Reference: android.view.View],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x24] : Processing move-result-object v0
0:[Reference: android.view.View],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x25] : Processing goto -21
0:[Reference: android.os.IBinder],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x25] : Merging at [0x25] to [0x10]:
0:[Zero/null],1:[Conflict],2:[Conflict], MERGE
0:[Reference: android.os.IBinder],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid], ==
0:[Reference: android.os.IBinder],1:[Conflict],2:[Conflict],
VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x10] : Processing return-object v0
0:[Reference: android.os.IBinder],1:[Conflict],2:[Conflict],
Rejecting opcode return-object v0
Register Types:
0: Undefined
1: Conflict
2: null
3: Boolean
4: Byte
5: Short
6: Char
7: Integer
8: Long (Low Half)
9: Long (High Half)
10: Float
11: Double (Low Half)
12: Double (High Half)
13: Precise Constant: -1
14: Zero/null
15: Precise Constant: 1
16: Precise Constant: 2
17: Precise Constant: 3
18: Precise Constant: 4
19: Reference: org.chromium.ui.base.WindowAndroid
20: Reference: java.lang.Object
21: Reference: java.lang.ref.WeakReference
22: Reference: java.lang.ref.Reference
23: Reference: android.content.Context
24: Reference: android.app.Activity
25: Unresolved Reference: android.os.IBinder
26: Reference: android.view.Window
27: Reference: android.view.View
28: Reference: android.os.IBinder
Dumping instructions and register lines:
0:[Undefined],1:[Undefined],2:[Reference: org.chromium.ui.base.WindowAndroid],
0x0000: V-O-B-- const/4 v1, #+0
0x0001: V-O---- iget-object v0, v2, Ljava/lang/ref/WeakReference; org.chromium.ui.base.WindowAndroid.e // field@7982
0x0003: V-O---- invoke-virtual {v0}, java.lang.Object java.lang.ref.WeakReference.get() // method@7347
0x0006: V-O---- move-result-object v0
0x0007: V-O--G- check-cast v0, android.content.Context // type@TypeIndex[61]
0x0009: V-O---- invoke-static {v0}, android.app.Activity org.chromium.ui.base.WindowAndroid.a(android.content.Context) // method@17017
0x000c: V-O---- move-result-object v0
0x000d: V-O---- if-nez v0, +4
0x000f: V-O---- move-object v0, v1
0:[Reference: android.os.IBinder],1:[Conflict],2:[Conflict],
0x0010: VCO-B-R return-object v0
0:[Reference: android.app.Activity],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
0x0011: V-O-B-- invoke-virtual {v0}, android.view.Window android.app.Activity.getWindow() // method@26
0x0014: V-O---- move-result-object v0
0x0015: V-O---- if-nez v0, +4
0x0017: V-O---- move-object v0, v1
0x0018: V-O---- goto -8
0:[Reference: android.view.Window],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
0x0019: V-O-B-- invoke-virtual {v0}, android.view.View android.view.Window.peekDecorView() // method@1459
0x001c: V-O---- move-result-object v0
0x001d: V-O---- if-nez v0, +4
0x001f: V-O---- move-object v0, v1
0x0020: V-O---- goto -16
0:[Reference: android.view.View],1:[Zero/null],2:[Reference: org.chromium.ui.base.WindowAndroid],
0x0021: V-O-B-- invoke-virtual {v0}, android.os.IBinder android.view.View.getWindowToken() // method@1318
0x0024: V-O---- move-result-object v0
0x0025: V-O---- goto -21
Setting org.chromium.ui.base.WindowAndroid to erroneous.

這個(gè)log最值得關(guān)注的有兩點(diǎn):

1、[0x10] can't resolve returned type 'Unresolved Reference: android.os.IBinder' or 'Reference: android.os.IBinder' VFY: android.os.IBinder org.chromium.ui.base.WindowAndroid.getWindowToken()[0x0] : Processing const/4 v1, #+0

根據(jù)打log的代碼,我們看到return_type對(duì)應(yīng)著'Unresolved Reference: android.os.IBinder'。

但return_type的來(lái)源是:

而GetMethodReturnType:

會(huì)調(diào)用FromDescriptor:

會(huì)調(diào)用ResolveClass,ResolveClass會(huì)調(diào)用ClassLinker::FindClass,F(xiàn)indClass有個(gè)顯而易見的失敗前提是:

也就是在當(dāng)前線程是RuntimeThread的時(shí)候,會(huì)拒絕FindClass。因?yàn)檫@可能會(huì)導(dǎo)致class進(jìn)入初始化過(guò)程,導(dǎo)致它調(diào)用class里面static block中的class初始化函數(shù)。在RuntimeThread缺少允許java 函數(shù)的環(huán)境,不能允許它這么做。

難道由于當(dāng)前線程是Runtime Thread嗎?是的話這個(gè)Thread是哪個(gè)Runtime Thread?難道是gc thread嗎?

2、對(duì)這個(gè)日志前后的Verify動(dòng)作進(jìn)行分析。發(fā)現(xiàn)正常能Verify過(guò)的線程,都有l(wèi)oad class的日志。但出問題的這條線程一條load class的日志都沒有,后面它還因?yàn)橥瑯拥脑騐erify失敗了好幾個(gè)class。這更加肯定失敗的線程是一個(gè)Runtime Thread。另外前面提到的VerifyError沒有調(diào)用棧記錄的現(xiàn)象也在側(cè)面印證這是個(gè)Runtime Thread。因?yàn)镽untime Thread沒有Java環(huán)境,不能調(diào)用Java函數(shù),所以沒有記錄。但我們還是需要找到這個(gè)線程是什么。為此我們動(dòng)用了第二個(gè)黑科技。

黑科技分析:手段二

通過(guò)觀察代碼,我們發(fā)現(xiàn)VerifyError都是通過(guò)同一個(gè)函數(shù)拋出的:

我們也能找到它的全局符號(hào),所以我們只需要在這個(gè)符號(hào)的位置加上執(zhí)行馬上崩潰的代碼,然后讓monkey觸發(fā)這個(gè)問題就能處理它了。

這里有個(gè)問題:android為了安全的原因禁止我們把代碼段的權(quán)限改為可寫。

如何安全的把代碼段改了呢?我們使用了/prof/self/mem技術(shù):打開/proc/self/mem文件,然后用pwrite api往符號(hào)的位置寫入必崩代碼。

這樣我們就發(fā)現(xiàn)了Verify失敗的那個(gè)線程:

根本原因分析

我們拿到了線程名Verification th。也拿到了線程啟動(dòng)的調(diào)用棧。他是從ThreadPool啟動(dòng)的,ThreadPool中的Thread都是RuntimeThread,坐實(shí)了之前的猜測(cè)。線程運(yùn)行的任務(wù)是BackgroundVerificationTask。可以迅速找到它啟動(dòng)的位置:

再找一下是這個(gè)提交出的問題:

commit 0d5f6402ff925ac1385ccb349f8a2798a4816458 Author: Nicolas Geoffray ngeoffray@google.com Date: Tue Apr 13 13:05:36 2021 +0100

Only run background verification when dexPathList is set.

Otherwise, the runtime will not be able to find the classes.

Test: 692-vdex-secondary-loader
Bug: 185088679
Change-Id: Idd39eabe00faa017aa5254f7188e7adbcaa23c74

diff --git a/dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java b/dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java
index 710a88cc6d0..afbc9ec9de7 100644
--- a/dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java
+++ b/dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java
@@ -128,6 +128,9 @@ public class BaseDexClassLoader extends ClassLoader {
: Arrays.copyOf(sharedLibraryLoaders, sharedLibraryLoaders.length);
this.pathList = new DexPathList(this, dexPath, librarySearchPath, null, isTrusted);

+ // Run background verification after having set 'pathList'.
+ this.pathList.maybeRunBackgroundVerification(this);
+
reportClassLoaderChain();
}

@@ -186,6 +189,8 @@ public class BaseDexClassLoader extends ClassLoader {
this.sharedLibraryLoaders = null;
this.pathList = new DexPathList(this, librarySearchPath);
this.pathList.initByteBufferDexPath(dexFiles);
+ // Run background verification after having set 'pathList'.
+ this.pathList.maybeRunBackgroundVerification(this);
}

@Override

用git tag --contain命令找了下,發(fā)現(xiàn)確實(shí)是android 12 beta版開始帶上的。

解決方案

除了向谷歌報(bào)告問題,抱怨一通之外我們還是要找到解決方案。谷歌說(shuō)他們下一版android 12的12月更新就會(huì)解決這個(gè)問題,但很多老機(jī)器根本不更新,所以他們是指望不上的了。

我們必須從OatFileManager::RunBackgroundVerification函數(shù)里面找到逼迫它不要啟動(dòng)后臺(tái)驗(yàn)證線程的方法。我們的目光很快落在了:

上面。因?yàn)槲覀冞€是能控制文件名的。前面的邏輯也有判斷sdk level,只要sdk level<=29也不會(huì)啟動(dòng)這個(gè)線程,但UC瀏覽器已經(jīng)把sdk level打開到30了(這也印證了背景提到UC瀏覽器把sdk level提高到30才出現(xiàn))。

觀察了函數(shù)DexLocationToOdexFilename,發(fā)現(xiàn)一行很有幫助:

// Get the base part of the file without the extension.
std::string file = location.substr(pos+1);
pos = file.rfind('.');
if (pos == std::string::npos) {
*error_msg = "Dex location " + location + " has no extension.";
return false;
}

只要我們讓它找不到suffix separator "."就能迫使它退出了。

結(jié)果

對(duì)android 12使用了軟鏈接core.jar為corejar的方法后, 這個(gè)問題就消失了。威脅UC內(nèi)核的怪獸被打敗了,世界又恢復(fù)往日的和平。

責(zé)任編輯:未麗燕 來(lái)源: 阿里巴巴移動(dòng)技術(shù)
相關(guān)推薦

2021-12-30 09:39:28

Android 12App開發(fā)者

2012-05-04 09:18:46

2012-03-23 09:55:34

NETSH

2021-08-21 15:57:18

Android 谷歌系統(tǒng)

2021-10-22 10:38:11

Android 谷歌Android 12

2009-02-05 10:12:00

2011-11-30 13:59:17

JavaJVM

2014-07-28 14:04:26

2025-09-02 02:22:00

2009-10-20 10:00:08

Windows 7疑難解答

2009-06-18 08:46:56

微軟Windows 7操作系統(tǒng)

2010-03-09 12:23:30

Python編碼

2009-07-08 13:22:48

JVM termina

2022-08-05 11:55:13

FlutteriOS

2013-02-16 13:26:00

360急救盤數(shù)據(jù)安全360安全中心

2010-08-20 14:15:08

DB2性能調(diào)優(yōu)

2025-05-08 08:00:00

2010-08-13 10:52:12

思科路由器崩潰

2010-07-29 09:47:22

2009-11-13 16:01:53

思科路由器崩潰
點(diǎn)贊
收藏

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

蜜臀精品久久久久久蜜臀| 成人福利片在线| 99久久久久久| 国产精品xxx视频| 亚洲天堂黄色片| 久久综合另类图片小说| 在线观看www91| 成人午夜免费在线视频| 你懂的在线播放| 国产一区福利在线| 欧洲精品毛片网站| 欧美日韩免费一区二区| 美女少妇全过程你懂的久久 | 影音先锋日韩有码| 91插插插影院| 亚洲va中文在线播放免费| 亚洲精品中文字幕在线观看| 欧美日韩综合久久| 成人av手机在线| 日本亚洲视频在线| 91福利视频网| 精品在线视频免费| 久久久久美女| 一本色道久久综合狠狠躁篇怎么玩 | 日韩va亚洲va欧美va久久| 精品少妇v888av| 青青青视频在线播放| 久久精品福利| 日韩视频免费观看高清完整版在线观看 | 日本精品600av| 亚洲欧洲另类国产综合| 欧美一级爱爱| 免费国产在线视频| jlzzjlzz亚洲日本少妇| 91在线观看网站| 国产又黄又爽视频| 免费观看一级特黄欧美大片| 91av在线看| 日韩av电影网| 激情欧美日韩| 欧美大片免费看| 欧美日韩中文字幕在线观看| 99久久综合狠狠综合久久aⅴ| 亚洲欧美日韩精品| av在线网站观看| 亚洲欧洲色图| 日韩久久免费电影| 国产精品九九视频| 美女一区2区| 亚洲国产精品高清久久久| 久久久久亚洲av无码网站| 久久wwww| 精品久久久久久亚洲综合网 | 国产日韩久久久| 丝袜美腿亚洲一区| 日本中文字幕成人| 国产91av在线播放| 激情文学综合丁香| 51国偷自产一区二区三区的来源| 99精品免费观看| 国产精品白丝jk白祙喷水网站| 成人午夜激情网| 国产婷婷在线视频| 国产成人自拍高清视频在线免费播放| 成人写真视频福利网| 国产片在线播放| 国产成人综合网站| 一区二区三区免费在线观看视频| 欧美精品videossex少妇| 亚洲色图视频免费播放| 蜜臀av.com| 肉肉视频在线观看| 五月天精品一区二区三区| 国产精品丝袜久久久久久消防器材| 九色porny视频在线观看| 欧美日韩在线看| 欧美自拍小视频| 国产精品一区二区三区www| 欧美一级二级三级蜜桃| 白嫩情侣偷拍呻吟刺激| 亚洲人成网亚洲欧洲无码| 亚洲一区av在线播放| 欧美日韩色视频| 激情久久一区| 国产精品久久久久久五月尺| 国产精品国产精品国产专区| 成人高清视频在线观看| 欧美日韩综合另类| 菠萝菠萝蜜在线视频免费观看| 亚洲一区二区黄色| 国产精品无码av无码| 99亚洲男女激情在线观看| 亚洲高清免费观看高清完整版| 国产成人无码精品久久二区三| 午夜精品视频一区二区三区在线看| 欧美国产在线视频| 中国老头性行为xxxx| 成人一区二区三区视频| 手机成人在线| 擼擼色在线看观看免费| 欧美区一区二区三区| 久久人人妻人人人人妻性色av| 成人在线电影在线观看视频| 久久久久久久91| 中文字幕日韩国产| bt7086福利一区国产| 亚洲自拍的二区三区| 手机在线观看av网站| 91精品婷婷国产综合久久性色 | 欧洲亚洲视频| 久久精品一偷一偷国产| 无码人妻精品一区二区三区不卡 | 污污影院在线观看| 欧洲一区二区三区在线| 亚洲一区二区三区四区五区六区| 小小影院久久| 国产精品美女主播| 日韩精品视频无播放器在线看| 亚洲另类一区二区| 五月激情婷婷在线| av一区二区在线观看| 91精品国产色综合久久不卡98口 | 97超碰国产在线| 久久久综合视频| 少妇高潮喷水在线观看| 日韩黄色av| 欧美成人三级视频网站| 一区二区日韩视频| 国产女人水真多18毛片18精品视频 | 给我看免费高清在线观看| 欧美aa国产视频| 国产主播喷水一区二区| 成人18在线| 日本高清无吗v一区| 双性尿奴穿贞c带憋尿| 好看的日韩av电影| www日韩av| 亚洲第一图区| 日韩欧美的一区| 欧美性猛交xxxxx少妇| 蜜桃视频第一区免费观看| 欧美一级爽aaaaa大片| 超碰一区二区| 精品无人区太爽高潮在线播放| 日本熟妇乱子伦xxxx| 成人午夜大片免费观看| 国产一区二区四区| 久久久久久毛片免费看| 98视频在线噜噜噜国产| 天堂视频中文在线| 色婷婷综合久久久中文字幕| 亚洲午夜福利在线观看| 视频一区中文字幕国产| 国产伦精品一区| 在线观看的黄色| 亚洲视频网站在线观看| 艳妇乳肉豪妇荡乳av无码福利| 国产日韩亚洲欧美综合| 激情视频免费网站| 在线国产一区二区| 成人国产一区二区| av在线理伦电影| 亚洲乱码av中文一区二区| 无码人妻熟妇av又粗又大| 中文字幕免费不卡| 99国产精品免费视频| 国产精品久久| 蜜桃久久精品乱码一区二区 | 欧美色综合影院| 国产黄色小视频网站| 高清shemale亚洲人妖| 99999精品视频| 久久中文字幕av| 999热视频在线观看| 9765激情中文在线| 亚洲图中文字幕| 国产精品一品二区三区的使用体验| 一区二区国产视频| 极品粉嫩小仙女高潮喷水久久| 日本v片在线高清不卡在线观看| 永久久久久久| 欧美国产极品| 成人欧美在线观看| 久久影院午夜精品| 久久亚洲精品一区| 日韩欧美在线观看一区二区| 欧美日韩一区二区不卡| 国产在线一区视频| 亚洲xxxxxx| 正在播放一区二区| 国产成人无码一区二区三区在线 | 亚洲一区二区在线免费| 久久男女视频| 视色,视色影院,视色影库,视色网| 精品国产乱子伦一区二区| 国产精品久久久久高潮| 日本成人不卡| 最新91在线视频| 五月婷婷六月丁香| 欧美一区二区女人| 日本丰满少妇做爰爽爽| 亚洲伊人色欲综合网| 成年人在线免费看片| 成人h动漫精品一区二| 中文字幕一区二区三区四区在线视频 | 亚洲精品国精品久久99热| 中文在线字幕av| 亚洲r级在线视频| 青花影视在线观看免费高清| 久久―日本道色综合久久| 国产在线视频三区| 免播放器亚洲一区| 日韩欧美国产免费| 中文字幕日韩欧美精品高清在线| 日本成人看片网址| 日韩激情网站| 国产精品免费一区二区三区在线观看| 成人av色网站| 国产精品大陆在线观看| 亚洲三级欧美| 久久久久久久久久久亚洲| 浪潮av一区| 在线国产精品播放| 国产资源在线播放| 亚洲成人中文字幕| 国产成人三级在线播放 | 国产91精品青草社区| 欧美xxxx视频| 欧美猛交ⅹxxx乱大交视频| 午夜视频在线观看网站| 亚洲天堂av在线播放| 亚洲aaaaaaa| 亚洲国产精品va在线看黑人| 99在线观看免费| 91精品在线观看入口| 91av久久久| 欧美日韩国产综合草草| 亚洲视频久久久| 欧美年轻男男videosbes| 最近中文在线观看| 欧美视频日韩视频| 伊人影院中文字幕| 欧美日韩一区在线观看| 中文无码精品一区二区三区| 欧美在线观看视频一区二区三区| 伊人成年综合网| 欧美老人xxxx18| 91成人国产综合久久精品| 欧美色男人天堂| 日韩女优视频免费观看| 中文字幕日日夜夜| 欧美日韩一区高清| 一区二区三区精彩视频| 91精品久久久久久蜜臀| japanese国产| 欧美一级淫片007| 高h放荡受浪受bl| 亚洲精品久久久久久久久久久久久| 99精品久久久久久中文字幕 | 天天操天天爱天天干| 日韩成人高清在线| 黄色软件在线| 久久在精品线影院精品国产| 亚洲丝袜一区| 雨宫琴音一区二区在线| 国产亚洲福利社区| 欧美女优在线视频| 一区二区三区免费看| 亚洲欧美综合国产精品一区| 僵尸世界大战2 在线播放| 国产精品普通话对白| 欧美精品无码一区二区三区| 精一区二区三区| 国模无码视频一区| 国产免费久久精品| 伊人在线视频观看| 激情亚洲一区二区三区四区 | 欧美另类tv| 日本人成精品视频在线| 农村妇女一区二区| 国产91色在线|亚洲| 免费观看不卡av| 免费久久久久久| 亚洲综合三区| 国产大片一区二区三区| av一区二区三区| 欧美福利在线视频| 午夜视黄欧洲亚洲| 国产原创中文av| 亚洲欧美激情一区| 羞羞污视频在线观看| 欧美综合在线观看| 经典三级久久| 日韩高清av电影| 欧美喷水视频| 免费黄色一级网站| 国产sm精品调教视频网站| 欧美三级视频网站| 亚洲国产成人91porn| 伊人免费在线观看高清版| 日韩av网址在线观看| www在线观看播放免费视频日本| 热99在线视频| 成人精品毛片| 老司机av福利| 日韩成人dvd| 超碰97在线资源站| 一区二区三区鲁丝不卡| 中文字幕一区二区三区免费看| 亚洲国产精品字幕| 午夜在线激情影院| 国产精品一区二区性色av| 日韩丝袜视频| 97视频在线免费| 国产剧情av麻豆香蕉精品| 成人小视频免费看| 欧美香蕉大胸在线视频观看| 狠狠人妻久久久久久综合麻豆| 日韩中文字幕av| 性欧美超级视频| 精品产品国产在线不卡| 亚洲一级电影| 亚洲av无码久久精品色欲| 国产精品久久久久aaaa樱花| 无码一区二区三区| 日韩黄色av网站| 欧美gv在线| 精品久久久久久乱码天堂| 狠狠综合久久| 手机免费看av片| 亚洲国产精品一区二区久久恐怖片 | 欧美成人精品3d动漫h| 久操视频在线免费播放| 91精品美女在线| 香蕉国产精品| 日本一二三四区视频| 亚洲人成网站色在线观看| 国产精品久久久久久久免费看| 日韩在线中文视频| 亚洲爽爆av| 亚洲黄色网址在线观看| 国产制服丝袜一区| 欧美做爰爽爽爽爽爽爽| 欧美一区二区在线不卡| 日本在线观看高清完整版| **亚洲第一综合导航网站| 午夜精品久久| 不许穿内裤随时挨c调教h苏绵| 亚洲乱码国产乱码精品精98午夜| 99久久精品国产色欲| 欧美日韩xxx| 里番精品3d一二三区| 大肉大捧一进一出好爽视频| 91久色porny| 黄色一区二区视频| 久久精品国产欧美激情| 一区二区三区欧洲区| bt天堂新版中文在线地址| 波波电影院一区二区三区| 97久久久久久久| 中文字幕日韩av综合精品| 欧洲大片精品免费永久看nba| 99er在线视频| 91在线精品一区二区三区| jizz国产在线| 久久伊人色综合| 99精品中文字幕在线不卡| jizzjizzxxxx| 国产精品久久久久久亚洲伦| 91黄色在线视频| 久久久女女女女999久久| 少妇高潮一区二区三区| 亚洲污视频在线观看| 亚洲柠檬福利资源导航| 亚洲人妻一区二区| 国产精品久久久久久久av电影| 亚洲字幕久久| 国产精品无码一区二区三| 欧美午夜免费电影| 污片在线免费观看| 日韩美女一区| 国产成人综合网站| 狠狠躁夜夜躁人人爽视频| 久久亚洲精品成人| 思热99re视热频这里只精品| 国产日韩欧美久久| 亚洲成人免费视频| 成人精品一区二区三区校园激情| 96精品久久久久中文字幕| 国产精品日韩| 亚洲天堂一级片| 亚洲欧美资源在线| 韩国三级成人在线| 欧美日韩大尺度| 亚洲一级电影视频| 夜级特黄日本大片_在线 | 99久久夜色精品国产亚洲96| 国产又粗又猛又色| 制服.丝袜.亚洲.另类.中文| 日韩新的三级电影|