国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Christian Gingras:那個(gè)直接在機(jī)器碼中改Bug的家伙

開(kāi)發(fā)
《機(jī)器人大戰(zhàn):2084》(英文:Robotron: 2084,也常簡(jiǎn)稱(chēng)為Robotron) 是由Vid Kidz開(kāi)發(fā)、Williams Electronics于1982年發(fā)行的一款街機(jī)游戲。它是一款2D射擊游戲。游戲設(shè)定在2084年的一個(gè)虛構(gòu)世界,在那兒機(jī)器人起來(lái)反抗人類(lèi)的統(tǒng)治。 玩家的任務(wù)是擊退一波又一波的機(jī)器人,拯救幸存的人類(lèi),并贏取盡可能多的分?jǐn)?shù)。

背景知識(shí):《機(jī)器人大戰(zhàn):2084》(英文:Robotron: 2084,也常簡(jiǎn)稱(chēng)為Robotron) 是由Vid Kidz開(kāi)發(fā)、Williams Electronics于1982年發(fā)行的一款街機(jī)游戲。它是一款2D射擊游戲。游戲設(shè)定在2084年的一個(gè)虛構(gòu)世界,在那兒機(jī)器人起來(lái)反抗人類(lèi)的統(tǒng)治。 玩家的任務(wù)是擊退一波又一波的機(jī)器人,拯救幸存的人類(lèi),并贏取盡可能多的分?jǐn)?shù)。

介紹:

  • 『拐角射擊失靈』,所有Robotron的ROM原始程序里頭有個(gè)bug,當(dāng)玩家對(duì)在戰(zhàn)場(chǎng)邊緣行進(jìn)的暴徒射擊的時(shí)候,程序會(huì)讀取代碼里一個(gè)錯(cuò)誤的位置。導(dǎo)致代碼不知道接下來(lái)做什么,程序監(jiān)視器就會(huì)重置游戲到地毯模式。
  • Eugene Jarvis 提到:1987年前后,一個(gè)叫Christian Gingras的加拿大小孩完整地分析了ROM里頭的機(jī)器代碼, 綜合得到了源程序列表。他發(fā)給我們他通過(guò)讀代碼發(fā)現(xiàn)的7個(gè)bug,然后我們修復(fù)了這些bug。這其中就有一個(gè)很著名的拐角射擊崩潰bug。
  • Sean Riddl提到:Williams Arcade Classics(一款游戲)出 現(xiàn)于1995年,我假設(shè)Eugene(Robotron游戲的設(shè)計(jì)者)已經(jīng)修復(fù)了ROM里頭的bug,我試用了一下程序然后回復(fù)了作者,他做了一些ROM 的改動(dòng),這些改動(dòng)讓仿真容易一點(diǎn)。(他把Stargate重做成了Defender II, 這肯定是非常多的工作),Sean Riddle寫(xiě)道:我用 google搜索了一下,好像人們認(rèn)為拐角射擊的bug修復(fù)了。之后補(bǔ)丁出來(lái)了,在補(bǔ)丁里頭可以看到“1987修改”。我想我是從 Williams Arcade Classics Widows95版里頭找到的補(bǔ)丁。

備注:雖然 Robotron 讓 Christian 獲得了聲望,但實(shí)際上他酷愛(ài)另一款游戲 Joust。

Robotron 2084

 

Christian 的自述(2012年11)

1982年的時(shí)候我在電子方面是很超前的,我可以設(shè)計(jì)模擬和數(shù)字系統(tǒng)。這些年出現(xiàn)的電子游戲表明,Joust/Robotron主板上100個(gè)芯片就可以讓系統(tǒng)執(zhí)行比標(biāo)準(zhǔn)晶體管邏輯門(mén)上更復(fù)雜的功能,比如說(shuō)Williams的游戲。

詳細(xì)地研究原理圖,有一個(gè)很明顯的選擇:在Joust里頭,摩托羅拉6809微處理器相當(dāng)于大腦,而用來(lái)創(chuàng)建電腦控制有智能行為的鳥(niǎo)的數(shù)據(jù),保存在12個(gè)電可編程序只讀存儲(chǔ)器(EPROM)里頭。

我意識(shí)到,如果我要自己設(shè)計(jì)復(fù)雜的電子系統(tǒng),我必須了解摩托羅拉6809是如何工作的。如果我是個(gè)幸運(yùn)的孩子可以訪(fǎng)問(wèn)大型主機(jī),我會(huì)拿6809作為參考來(lái)學(xué)習(xí)微處理器。

但是我能擁有的最強(qiáng)大的計(jì)算機(jī)是街機(jī)游戲機(jī)。這些游戲比當(dāng)時(shí)的家庭計(jì)算機(jī)比如TRS-80或者TI99a快幾個(gè)數(shù)量級(jí)。

用不了多長(zhǎng)時(shí)間我就找到了最快的游戲, Robotron 2084有10波全速的120個(gè)對(duì)象,很顯然是最快的。在Joust里頭,只有10只鳥(niǎo) 3個(gè)翼龍和兩個(gè)玩家。相對(duì)于Joust而言,Robotron 2084性能更具有挑戰(zhàn)性。如果我們用Z80處理器,比如Miss Pac-man,來(lái)處 理4個(gè)鬼魂,一個(gè)水果和一個(gè)玩家,6809微處理器明顯要快很多

我花了幾年的時(shí)間才找到一個(gè)專(zhuān)家,他把Robotron主板上的EPROM去掉,并且讓我讀EPROM里頭的程序然后還可以寫(xiě)回去。這是1984年或者1985年的事。

那個(gè)時(shí)候,我在Radio Shack買(mǎi)了一臺(tái)彩色電腦COCO2, 里頭有一個(gè)微軟寫(xiě)的6809的調(diào)試器edtasm。我反向工程破解了 edtasm,于是我明白了6809的匯編和反匯編程序是怎么創(chuàng)建的。但是我覺(jué)得Robotron:2084是如此復(fù)雜,所以我沒(méi)有敢研究它。1985年 還是1986年,我反向工程研究了COCO2里8K大的ROM,這個(gè)ROM創(chuàng)建了COCO2的基本語(yǔ)言。然后我也研究了很多其他的應(yīng)用比如磁帶軟盤(pán)拷貝應(yīng) 用,為了節(jié)約我的工作,我也通過(guò)研究一些游戲來(lái)了解如何訪(fǎng)問(wèn)COCO2的圖形模式。

最后在1986年8月,我準(zhǔn)備好了要開(kāi)始研究Robotron:2084。我做了一個(gè)定制的edtasm,它可以從EPROM里頭每次讀4K的二進(jìn) 制數(shù)據(jù),并且反編譯代碼同時(shí)把實(shí)際硬件地址映射成虛擬的地址。不是在屏幕上顯示, 反編譯器把結(jié)果傳到打印端。總共用了3天才打印完512頁(yè)程序。我時(shí)不 時(shí)往墨盒里頭加點(diǎn)紅色或者黑色或者藍(lán)色的墨水。為了節(jié)約紙的空間還有錢(qián),我打印了雙面的。這些包含了反編譯的6個(gè)EPROM的所有程序。

我前些年研究過(guò)一些6809的應(yīng)用,我很高興我能用相似的方式讀懂這些代碼。不過(guò)有些明顯的區(qū)別:

Robotron: 2084用了一些變址指令比如:“LDA A,Y++, STB B,X+$0A”(從地址為寄存器X值的內(nèi)存里讀一個(gè)字節(jié),增加那個(gè)寄存器,把那個(gè)字節(jié)寫(xiě)道寄存器Y指向的內(nèi)存地址的第10個(gè)字節(jié))

它證明Robotron:2084雖然是匯編寫(xiě)的,卻是很干凈的面向?qū)ο蟮拇a。

Robotron依賴(lài)一些共享方法來(lái)做一些操作,比如分配內(nèi)存,休眠一段時(shí)間,在這中間處理器可以做一些其他的操作,休眠結(jié)束之后會(huì)重新執(zhí)行之前的代碼。

這說(shuō)明Robotron是一個(gè)完全的多線(xiàn)程應(yīng)用,每個(gè)移動(dòng)對(duì)象都是由不同的線(xiàn)程來(lái)控制的。

如果我沒(méi)記錯(cuò),IRQ中斷每秒執(zhí)行300次,是一個(gè)高優(yōu)先級(jí)的線(xiàn)程負(fù)責(zé)執(zhí)行高優(yōu)先級(jí)的任務(wù),比如說(shuō)當(dāng)陰極射線(xiàn)管(CRT)掃描的距離某個(gè)地方足夠遠(yuǎn) 的時(shí)候,繪制屏幕的一部分來(lái)避免閃爍。一個(gè)狀態(tài)機(jī)讀取CRT垂直掃描的位置,然后選擇當(dāng)前對(duì)象列表里頭的可以安全刷新的對(duì)象。比如說(shuō),如果我們用手柄控制 一個(gè)玩家到接近屏幕的頂部,

重繪操作只會(huì)當(dāng)CRT掃描在屏幕中間和底部的之間執(zhí)行。

我用了8個(gè)月來(lái)學(xué)習(xí)這512頁(yè)代碼,在我當(dāng)保安的地方,每天晚上在物業(yè)檢查的間歇里,我會(huì)打開(kāi)那卷紙,用彩色的筆畫(huà)箭頭來(lái)標(biāo)記那些執(zhí)行了特殊功能或者讀寫(xiě)了特殊端口的地方。

幾個(gè)月之后,我得到了 “為什么Robotron:2084會(huì)這么快”的答案。位塊傳送器(blitter,一個(gè)垂直或者水平的直接內(nèi)存控制芯片) 是高性能的主要因素。但是Defender(一款游戲)屏幕繪制的速度和Robotron一樣,但它沒(méi)有blitter(blitter是 Robotron的設(shè)計(jì),Stargate(一款游戲)額外宣揚(yáng)了blitter芯片)

我決定接著研究Robotron,同時(shí)也看看Joust 和Stargate,來(lái)比較它們的相同和不同特性。有些代碼處理一些很難的算法,給了我很深的印象,比如說(shuō):它如何用6809的MUL指令來(lái)做除法,用“固定點(diǎn)數(shù)(相對(duì)于浮點(diǎn)數(shù))”來(lái)做二進(jìn)制計(jì)算。

當(dāng)研究代碼如何處理游戲事務(wù)的時(shí)候,我就能猜到這些代碼過(guò)去引起過(guò)一些問(wèn)題。 有些測(cè)試可以核實(shí)可能的問(wèn)題,比如用4堵墻來(lái)比較子彈的位置,從而確 認(rèn)子彈被限制在可視的屏幕范圍之內(nèi)。總共48K的內(nèi)存有40K用來(lái)顯示每個(gè)象素,剩下的8K用來(lái)作為代碼的棧指針,“對(duì)象”(和C++的對(duì)象概念相似,一 小段內(nèi)存用來(lái)記錄enforcer,坦克,子彈的位置還有其他對(duì)象的參數(shù)),局部變量和全局變量。如果一個(gè)對(duì)象被錯(cuò)誤地被繪制里屏幕的右邊太遠(yuǎn),這樣就有 可能污染這8K的程序內(nèi)存。

#p#

在后來(lái)的4個(gè)月里,我研究到了管理enforcers的代碼。我很好奇,沒(méi)有正弦余弦對(duì)數(shù)值數(shù)的代碼是怎么樣讓子彈是怎么做螺旋運(yùn)動(dòng)的。我也想明 白,當(dāng)一個(gè)enforcer在屏幕左邊慢慢接近玩家的時(shí)候,被驚嚇的小狗飛到屏幕的右邊,然后慢下來(lái),劃了一條優(yōu)美的曲線(xiàn)回到玩家身邊。后來(lái)這個(gè)被證明是 個(gè)錯(cuò)誤,代碼里頭留下了一個(gè)8個(gè)字節(jié)的二進(jìn)制溢出。屏幕320像素寬,但是8位寄存器只能保存從左邊開(kāi)始的256個(gè)像素,所以Enforcer可能會(huì)認(rèn)為 玩家在屏幕的右邊其實(shí)玩家就在旁邊很近的位置上,于是enforcer會(huì)計(jì)算新的速度去追蹤它想象中的玩家。然后,再這個(gè)瘋狂賽跑的中 間,enforcer會(huì)感知到玩家的正確位置在左邊,所以他會(huì)減慢速度,修改自己的方向,劃出優(yōu)雅的曲線(xiàn)。

通過(guò)對(duì)這個(gè)bug的研究,我也弄清楚了這個(gè)多線(xiàn)程多任務(wù)高性能軟件的另一個(gè)特性:每個(gè)enforcer都有自己私有的數(shù)據(jù)塊,這個(gè)私有的數(shù)據(jù)塊讓每 個(gè)enforcer保持獨(dú)立。Enforcer的數(shù)據(jù)結(jié)構(gòu)里有一個(gè)8位的變量,來(lái)記錄enforcer應(yīng)該保持當(dāng)前的狀態(tài)多久(多少個(gè)刷新循環(huán)),然后在 改變主意前做點(diǎn)其它的事情。當(dāng)enforcer錯(cuò)誤地朝右邊飛行的時(shí)候,它會(huì)追蹤這個(gè)實(shí)際上不在那里的玩家一段時(shí)間,當(dāng)上面提到的那個(gè)變量減少到 零,enforcer就會(huì)重新評(píng)估玩家在哪里,然后采取新的動(dòng)作。走過(guò)一條螺旋曲線(xiàn)到達(dá)玩家的位置。

六個(gè)月的研究讓我看到了代碼的每個(gè)細(xì)節(jié),我創(chuàng)建了一個(gè)函數(shù)調(diào)用的列表(誰(shuí)調(diào)用了誰(shuí),調(diào)用了多少次的一個(gè)交叉參考),相似地,我也列出了所有的全局變 量,這些全局變量可以被DP寄存器用8位指針的方式訪(fǎng)問(wèn)。我記錄下了所有可以讀寫(xiě)這些變量的代碼位置。我可以看到有些變量指揮被射擊單位(坦 克,enforcer)使用。有些僅僅被分配內(nèi)存的神秘代碼和其他的操作(操作系統(tǒng),實(shí)時(shí)多任務(wù)使用者)使用

我也找到所有的加密文本和所有的代碼保護(hù)措施,這些秘密指令防止別人盜版Robotron這個(gè)游戲。Joust這個(gè)游戲里,如果有人把Williams修改成另外一個(gè)名字,這游戲就不能工作。但是如果我想修復(fù)那個(gè)隨機(jī)重置的bug,我就必須禁用這些保護(hù)措施。

我知道“fancy模式”是防止隨即重置bug的一個(gè)辦法,如果關(guān)閉,射擊的時(shí)候就不會(huì)繪制爆炸,越來(lái)越清楚地表明這爆炸的繪制引起了隨機(jī)重置的問(wèn)題。

1986年秋天,我決定寫(xiě)信給Eugene P. Jarvis 和Larry E. DeMar,告訴他們我已詳細(xì)研究了 Robotron:2084,而且我可能修改了那個(gè)bug。我從一個(gè)游戲機(jī)雜志上面知道了他們的名字。當(dāng)我解密一部分代碼里頭的加密文本的時(shí)候,我又看到 這兩個(gè)名字,所以我確信他們就是這個(gè)游戲的設(shè)計(jì)者。

當(dāng)我等待回信的時(shí)候,我得了肺炎。我意識(shí)到我有可能不能戰(zhàn)勝疾病(我以前沒(méi)有吃過(guò)抗生素,不知道醫(yī)生能幫什么,我訪(fǎng)問(wèn)了所有的以前有聯(lián)系方式的醫(yī) 生,他們不在乎而且什么忙都幫不了)。我感到了總結(jié)我一生中最重要工作的緊迫性,如果我不在了,這些工作都會(huì)浪費(fèi)掉,我身邊沒(méi)有人知道我做的工作。

我用了我所有的精力來(lái)修改代碼,而且寫(xiě)了一封詳細(xì)的信給Eugene 和Larry。我記錄了所有我發(fā)現(xiàn)的錯(cuò)誤,解釋了錯(cuò)誤行為和原因,還有解決辦 法。我記錄了6個(gè)字節(jié)來(lái)執(zhí)行我的測(cè)試,只有Eugene 和 Larry會(huì)知道什么意思。我不想讓他們以為我是某些非法贊助人雇傭的黑客來(lái)攻破這些保護(hù)。 我謹(jǐn)慎地說(shuō)明我絕對(duì)理解代碼的每一部分,當(dāng)我修復(fù)隨機(jī)重置bug的時(shí)候,沒(méi)有愚蠢地觸發(fā)保護(hù)措施。6頁(yè)信里有關(guān)于bug的濃縮后的精確技術(shù)描述。

在信的結(jié)尾我寫(xiě)到:我所有這些研究都是因?yàn)槲覠釔?ài)硬件(6809基于圖形顯示),軟件(難以置信高效的多任務(wù)代碼)和它的設(shè)計(jì)者。這48K代碼就像 一部小說(shuō)或者一個(gè)很精彩的故事,為向作者的天資致敬,所以我寫(xiě)了信的最后一部分。事實(shí)上,這些工作是有自己生命的,無(wú)數(shù)人付出汗水和精力推動(dòng)手柄來(lái)挑戰(zhàn)機(jī) 器。也許比一部?jī)?yōu)秀小說(shuō)的一些角色更加讓人動(dòng)情。

如果使用一個(gè)555電子振蕩器來(lái)產(chǎn)生IRQ中斷(把6809上面的300赫茲的IRQ卸載,然后接上555振蕩器),然后調(diào)整振蕩器頻率到足夠高, 這樣CPU會(huì)被占用而只剩下很少的時(shí)間也就是幾千赫茲周期來(lái)執(zhí)行代碼, 這樣我就可以讓player用很多分鐘初始化爆炸,而且游戲的速度非常低。我用了 幾小時(shí)來(lái)玩這個(gè)慢游戲,享受著更加容易毫無(wú)壓力的游戲。即使粗魯?shù)剡`反計(jì)時(shí),代碼居然沒(méi)有任何問(wèn)題,這讓我挺驚訝。我知道我只要把Player挪動(dòng)到左上 角,游戲就會(huì)崩潰。我發(fā)現(xiàn)如果我關(guān)掉fancy模式,不用初始化爆炸,機(jī)器就不會(huì)有任何崩潰的情況。簡(jiǎn)而言之,這個(gè)bug跟繪制爆炸相關(guān)的線(xiàn)索又多了一 條。優(yōu)秀的選手,比如雙胞胎兄弟Ian 和Yvan Girouard發(fā)誓他們發(fā)現(xiàn)每次機(jī)器崩潰的時(shí)候都有一個(gè)enforcer在左上角。這些聰明的玩家 學(xué)會(huì)了避免斜對(duì)角線(xiàn)設(shè)計(jì),這樣他們用一個(gè)游戲幣就可以玩好幾個(gè)小時(shí)。

幾個(gè)星期后,一個(gè)星期六早上電話(huà)響了,有人說(shuō)英語(yǔ)。我(加拿大人估計(jì)說(shuō)法語(yǔ)的)告訴我的同伴Michel-Guy起來(lái)跟那個(gè)人說(shuō)話(huà),來(lái)電話(huà)的是Robotron設(shè)計(jì)者,Michel告訴我說(shuō)他們想見(jiàn)我,他們會(huì)給我提供費(fèi)用包括火車(chē)旅館等等。

去芝加哥的那天,我打印了繪制對(duì)角線(xiàn)爆炸的程序,然后開(kāi)始耐心地給每個(gè)分支劃箭頭來(lái)表明代碼流程。當(dāng)差不多到芝加哥的時(shí)候,我又一次發(fā)現(xiàn)6809執(zhí) 行了從指針列表里頭跳轉(zhuǎn)的指令。當(dāng)對(duì)象離墻太近的時(shí)候,這段代碼允許CPU跳過(guò)繪制太多的線(xiàn),因?yàn)檫@個(gè)時(shí)候已經(jīng)無(wú)法完全顯示爆炸的形狀了。所以,如果 enforcer靠近墻的時(shí)候,只需要繪制比較少的線(xiàn)條。一種極端情況,如果enforcer靠墻太近,甚至容不下一條線(xiàn)會(huì)怎么樣?重新看了一下跳轉(zhuǎn)表, 如果沒(méi)有線(xiàn)條可以繪制,BEQ(結(jié)果為零跳轉(zhuǎn)指令)就會(huì)避開(kāi)跳轉(zhuǎn)表,然后CPU會(huì)跳轉(zhuǎn)到6809的OP-Code決定的地址,導(dǎo)致處理器失敗,監(jiān)視器發(fā)現(xiàn) 了這個(gè)“死亡代碼”之后硬件重置了CPU。

我異常高興,我終于可以告訴Eugene 和Larry導(dǎo)致機(jī)器崩潰的真正bug。

當(dāng)我們討論那個(gè)bug的時(shí)候,他們兩個(gè)就像被嚇倒的小動(dòng)物,小心地走過(guò)來(lái),然后拋開(kāi),然后又猶豫著回來(lái)。我問(wèn)他們:是不是一個(gè)溢出?是一個(gè)用320水平像素來(lái)計(jì)算但實(shí)際上只有256像素。你們實(shí)際上早就發(fā)現(xiàn)了這個(gè)問(wèn)題卻由他去,作為enforcers的一個(gè)復(fù)雜行為。

Larry笑了并且確認(rèn)了我的直覺(jué)。然后Larry停下來(lái)跟我說(shuō):“最近5年,我從來(lái)沒(méi)有跟任何人討論過(guò)Robotron的設(shè)計(jì)。我的朋友們不能理 解這樣的技術(shù)問(wèn)題。但是今天,一個(gè)不會(huì)說(shuō)我們語(yǔ)言的陌生人,我們一起討論就像我們?cè)?jīng)在一起工作一樣,就像你也是Robotron最初的設(shè)計(jì)者一樣。”

后來(lái)我問(wèn)他們?cè)趺丛u(píng)價(jià)我對(duì)Robotron的理解,Larry說(shuō)很好,不過(guò)當(dāng)然沒(méi)有超過(guò)他和Eugene。Eugene說(shuō)我對(duì)代碼的每一部分都清晰地理解,從啟動(dòng)測(cè)試到操作系統(tǒng)的其他部分,還有游戲本身。他覺(jué)得從系統(tǒng)整體上我的理解超過(guò)了他和Larry。

那天晚些時(shí)候,Larry需要離開(kāi)我們。他推薦我做Joust的設(shè)計(jì)者,Eugene有些懊惱,因?yàn)楸绕餜obotron我更喜歡Joust。我告 訴設(shè)計(jì)者我找不到任何問(wèn)題。我不喜歡IRQ程序里頭的測(cè)試,這個(gè)測(cè)試可能會(huì)引起自動(dòng)重置,但是我明白了除非硬件問(wèn)題這些代碼永遠(yuǎn)不會(huì)觸發(fā)的。 Mister Newcommer解釋給我說(shuō)他發(fā)現(xiàn)了一個(gè)鳥(niǎo)和平臺(tái)的沖突。他用RAM里頭地一個(gè)數(shù)組發(fā)現(xiàn)了一個(gè)有些粗略但是有效的沖突,這個(gè)數(shù)組的修改用 來(lái)反映平臺(tái)的增加或者移動(dòng)。

Larry堅(jiān)持回來(lái)并且開(kāi)車(chē)送我到機(jī)場(chǎng)。當(dāng)他過(guò)分地朝一個(gè)公交車(chē)司機(jī)按喇叭打算從他那里切過(guò)去的時(shí)候,我感覺(jué)這一切就是我一生的課堂。

原文鏈接:www.robotron2084guidebook.com/technical/christiangingras/

譯文鏈接:blog.jobbole.com/44847/

責(zé)任編輯:陳四芳 來(lái)源: 伯樂(lè)在線(xiàn)
相關(guān)推薦

2013-08-09 17:45:28

2009-07-15 17:33:11

Jython代碼

2025-12-04 00:35:00

2023-01-09 08:32:00

編譯器虛擬機(jī)操作系統(tǒng)

2012-03-09 17:35:43

ibmdw

2010-01-27 09:43:32

Chrome瀏覽器

2025-01-10 14:20:29

2025-09-16 09:19:53

2017-07-13 11:46:11

戴爾造夢(mèng)5000輕裝版

2021-05-09 21:35:25

Java機(jī)器代碼

2022-04-10 10:57:06

eBPFJIT即時(shí)編譯

2025-09-09 01:10:00

SpringAILangChain

2011-11-11 11:01:23

Windows 8系統(tǒng)

2025-04-02 07:40:30

2009-11-27 08:56:14

Windows 7附件

2014-04-04 09:48:11

.NET Native C#

2025-09-05 09:02:00

2011-11-30 10:55:54

2021-04-13 11:10:09

Windows 10Windows微軟

2010-10-26 14:18:25

應(yīng)用交付負(fù)載均衡Radware
點(diǎn)贊
收藏

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

久久艹中文字幕| 欧美日本高清视频在线观看| 国产精品黄色片| 久久久久久久免费视频| 亚洲免费精彩视频| 国产精品一区二区果冻传媒| 在线天堂资源| 国产精品久久久久7777| 最新91在线视频| 国产亚洲欧美日韩俺去了| 秋霞一区二区三区| 人人澡人一摸人人添| 国产91ⅴ在线精品免费观看| 亚洲色图制服诱惑| 香蕉久久网站| 成人看av片| 伊人婷婷久久| 久久久国产精彩视频美女艺术照福利| 欧美国产一区视频在线观看| 男男gay无套免费视频欧美| 在线观看av资源| 蜜桃网站成人| 在线观看欧美视频| 国产精品视频麻豆| 一区二区电影在线观看| 宅男在线观看免费高清网站| 日韩久久久久久久久久久久| 97超级碰碰碰久久久| 欧美性猛交xxxx乱大交蜜桃 | 成人aaaa免费全部观看| 成人资源在线播放| 性色av一区| 亚洲精品一区二区毛豆| 欧美插天视频在线播放| 亚洲成人一区二区| 日韩精品1区2区3区| 精品视频在线观看免费观看 | 高清国产一区二区三区四区五区| 又黄又爽毛片免费观看| 99在线影院| 在线播放日韩专区| 亚洲国产精品人人做人人爽| 免费一区二区视频| 日韩成人午夜| 羞羞网站在线免费观看| 妺妺窝人体色www在线观看| 国产超碰91| 久久精品国产免费观看| 精品成人乱色一区二区| 国产老肥熟一区二区三区| 欧美综合久久| 日本免费久久| 日本在线丨区| 欧美日韩精品在线一区二区| 99在线看视频| 欧美成人激情图片网| 欧美日韩免费视频| 中文在线一区二区 | 欧美一区二区三区四区五区 | 先锋影音一区二区| 色吊丝在线永久观看最新版本| 国产日韩视频在线播放| 国产xxx69麻豆国语对白| 亚洲国产精品小视频| 一区二区三区**美女毛片| 蜜臀av一区二区在线免费观看| 国产成人短视频在线观看| 精精国产xxxx视频在线播放| 草莓污污视频在线观看| 黄色一级片av| 成人欧美一区二区| 国产69精品久久久久99| 精品国产3级a| 五月综合激情婷婷六月色窝| 99视频精品免费视频| 亚洲免费精品| 精品国产美女| 国产精品高清一区二区| 欧美videos另类精品| 最新av在线| www日韩视频| 正在播放亚洲| 成人动漫视频在线观看完整版 | 毛葺葺老太做受视频| 日韩欧美三级一区二区| 成人夜晚看av| 97视频在线看| 日韩综合中文字幕| 欧美成人一区二区三区片免费| 亚洲第一成人在线| 久久久精品黄色| 久久99精品久久久| 亚洲视频1区| 亚洲女同中文字幕| 同性恋视频一区| 精品三级国产| 91大神在线观看线路一区| 手机电影在线观看| 日韩精品视频在线观看一区二区三区| 天天色综合社区| 亚洲熟妇av日韩熟妇在线| 夜夜爽www精品| 精品国产一二| 成人中心免费视频| 欧洲亚洲女同hd| 国模精品视频一区二区| 久久精品国产一区二区电影| 精品视频久久久久久久| 91精品国产综合久久精品| 欧美日韩在线视频一区| 一区二区在线观看视频在线观看| 国产精品午夜在线| 久久亚洲捆绑美女| 成人av一区二区三区| 国产精品亚洲视频| 国产一区二区精品在线观看| 免费xxxx性欧美18vr| 久久在线91| 久久久精品午夜少妇| 国产视频一区在线观看一区免费| 欧美.www| 欧美视频网站| 国内精品久久久久久久影视蜜臀| 91高清一区| 欧美激情视频一区二区三区在线播放 | 亚洲国产高清在线观看| 国产精品涩涩涩视频网站| 亚洲欧洲二区| 国自产拍在线网站网址视频| 黄色漫画在线免费观看| 国产日产欧美视频| 久久综合久久久久| 日韩视频 中文字幕| 亚洲精品久久区二区三区蜜桃臀| 国产日韩三区| 狠狠色伊人亚洲综合网站色| 成人av电影免费| 成人综合av网| 成人欧美一区二区三区黑人免费| 97国产超碰| 国产亚洲精品美女久久久m| 国产成人亚洲欧美| 韩国一区二区三区美女美女秀| 国产一级精品aaaaa看| 国产一区二区无遮挡| 久久久久久久久四区三区| 蜜桃91精品入口| 日韩在线导航| 日韩精品第1页| 无码中文字幕色专区| avav在线看| 国产日韩欧美久久| 激情六月婷婷| 四色成人av永久网址| 偷拍自拍在线| 日本中文在线观看| 老司机99精品99| 波多野结衣中文字幕久久| 日韩伦理在线一区| 日韩精品一页| 日韩深夜福利| 久久久久久久久丰满| 日韩午夜电影| 韩国成人精品a∨在线观看| 成人免费视频视频| 国产精品剧情在线亚洲| 亚洲成人av电影在线| 在线观看av不卡| 欧美成人艳星乳罩| 这里只有视频精品| 欧美极品少妇xxxxⅹ裸体艺术| 国产69久久精品成人看| 国产精品专区h在线观看| 国产精品一区二| 国产福利片一区二区| 黄色片久久久久| 色视频www在线播放| 黄网址在线观看| 国产精品免费一区二区三区四区 | 欧美丝袜一区二区| 男人天堂网站在线| 久久国产婷婷国产香蕉| 91黄色国产视频| 综合日韩在线| 国产精品一区视频网站| 亚洲五月综合| 99国产视频在线| 蜜乳av一区二区三区| 综合色婷婷一区二区亚洲欧美国产| 国产黄色91视频| 91黑丝在线| 亚洲成年人影院| youjizz在线播放| 亚洲丝袜美腿综合| 五月天在线免费视频| 在线视频亚洲专区| 欧美电影精品一区二区| 欧美成人福利在线观看| 99国内精品久久| 波多野结衣 作品|