肖遠(yuǎn)發(fā)現(xiàn)問題,是在對03:12:31以后的數(shù)據(jù)包的分析過程中,這時(shí)不同的數(shù)據(jù)包并不完全相同,說明世界還沒有完全靜止下來。
分析工具一邊比對每一次的內(nèi)存數(shù)據(jù)樣本,一邊將這些數(shù)據(jù)以圖表的形式展示出來,便于肖遠(yuǎn)更直觀的觀察這些數(shù)據(jù)的變化特征,只不過因?yàn)榉治鰯?shù)據(jù)要花費(fèi)一定的時(shí)間,所以,圖像的變化比起god程序的監(jiān)控圖像來,變化慢了很多。
因?yàn)檫@里的圖像和god監(jiān)控程序的顯示原理一樣,所以顯示出來的圖形也與那里的完全相同,剛開始的時(shí)候,圖像上一個(gè)與其他地方有著明顯分別區(qū)域在緩慢的四處移動(dòng),肖遠(yuǎn)知道這個(gè)漩渦是種子的代碼在世界中的映像。
看著種子的映像仍然存在,肖遠(yuǎn)想起第一階段的分析中,那些不再發(fā)生變化的內(nèi)存影像中,好像種子不見了。
“它難道被抹殺了?”肖遠(yuǎn)盯著電腦屏幕上的分析過程,心中暗暗思忖,“不應(yīng)該的,如果種子被抹殺的話,god應(yīng)該會(huì)很快就將世界的平衡恢復(fù),但是事實(shí)是沒有恢復(fù),這其中一定發(fā)生了什么我沒有想到的事情。”
“咦,怎么回事?”正在思考的時(shí)候,肖遠(yuǎn)發(fā)現(xiàn)原本在圖像上還十分明顯,一眼就能分辨出來的種子突然消失了,接下來圖像又變化了兩幀,就靜止了,既沒有繼續(xù)恢復(fù)平衡,也沒有因?yàn)椴黄胶舛^續(xù)變化下去。
肖遠(yuǎn)暫停了分析軟件,從圖像靜止下來的時(shí)間點(diǎn)提取了一個(gè)內(nèi)存樣本,拿來和最后的內(nèi)存樣本文件進(jìn)行了對比..完全一樣。
“種子突然消失了,然后god也不工作了,有點(diǎn)兒像同歸于盡。”
肖遠(yuǎn)再次回放了剛才的圖像演變過程,瞪大了眼睛盯著屏幕上的圖像,想要看清楚在圖像消失的一瞬間,究竟發(fā)生了什么,但是卻一無所獲。
于是他干脆不讓圖形自動(dòng)運(yùn)行了,而是手動(dòng)讓這些圖像一幀一幀的出現(xiàn),仔細(xì)觀察,在圖像消失的上一幀停了下來,仔細(xì)觀察了一下,仍然是沒有發(fā)現(xiàn)什么問題,于是他將這一幀的內(nèi)存樣本提取了出來,從中將種子的代碼單獨(dú)提取了出來,對其進(jìn)行了反匯編。
得到種子程序這一時(shí)刻的匯編程序后,肖遠(yuǎn)發(fā)現(xiàn)得到的它和種子未放入世界進(jìn)行進(jìn)化之前的程序相比,已經(jīng)發(fā)生了很大變化,閱讀時(shí)給他的感覺就像在閱讀一段全新的程序一樣,要知道這個(gè)程序根本就是出自他手。
“看來種子真的自我進(jìn)化了,只是它為什么會(huì)自動(dòng)消失呢?”肖遠(yuǎn)努力在代碼中尋找著種子自動(dòng)消失的痕跡。
將程序通讀了一遍,肖遠(yuǎn)發(fā)現(xiàn)進(jìn)化后的種子程序無論是長度還是復(fù)雜性都增加了很多,其中存在一段奇異的代碼。
“這應(yīng)該就是種子能夠突然消失的原因了。”肖遠(yuǎn)覺得自己似乎已經(jīng)找到了答案,但是這段代碼很晦澀,難以理解,這讓他感到有些受傷。
“見鬼了。”肖遠(yuǎn)不由得罵了一句,然后反復(fù)讀了幾遍這段代碼,并將其中涉及到的寄存器,以及寄存器之間的數(shù)據(jù)流向繪制成了圖像,并找來一本這臺(tái)工作站的cpu編碼的詳細(xì)手冊,一點(diǎn)一點(diǎn)兒加以對照。
所謂讀書百遍,其義自現(xiàn),程序也是如此,反復(fù)讀過幾遍后,肖遠(yuǎn)越來越覺得這兩端程序有些非比尋常,并有種隱隱的預(yù)感,讀懂這兩端程序?qū)⑹撬忾_種子程序以及god程序反常表現(xiàn)的關(guān)鍵所在。
終于,肖遠(yuǎn)從這些代碼中找到了最關(guān)鍵的邏輯,卻被他的發(fā)現(xiàn)下了一跳,甚至有些難以置信,因?yàn)檫@段代碼竟然用一種很巧妙的方法完成了一個(gè)遠(yuǎn)程跳轉(zhuǎn),跳轉(zhuǎn)到目的地已經(jīng)超出了god創(chuàng)造的世界的內(nèi)存范圍,它所使用到的指令竟然是工作站cpu的一段特殊的指令序列,而這段指令肖遠(yuǎn)事先根本就不知道,更不會(huì)寫到程序中。
肖遠(yuǎn)心中疑惑,如果不是他有非常豐富的閱讀代碼的經(jīng)驗(yàn),手邊又有cpu指令集的詳細(xì)資料可查,這段代碼究竟是干什么用的,就算他讀上一百遍,恐怕也不會(huì)知道的。
“只是種子程序的代碼里怎么會(huì)有這樣的代碼段了?”
肖遠(yuǎn)對這個(gè)現(xiàn)象倍感不解,覺得不把這個(gè)現(xiàn)象搞清楚,會(huì)很不甘心,于是他再次將沒有反匯編之前的種子二進(jìn)制代碼拿了出來,決定從二進(jìn)制代碼入手,試試能找到什么端倪不能。
直接閱讀二進(jìn)制代碼顯然是不可行的,好在肖遠(yuǎn)手里還有另外一個(gè)工具,這個(gè)工具的界面分成左右兩欄,左欄是二進(jìn)制代碼,右欄是二進(jìn)制代碼對應(yīng)的匯編代碼,兩邊對照著閱讀,就不是那么困難了。
可惜這樣反復(fù)讀了兩遍,肖遠(yuǎn)還是沒有發(fā)現(xiàn)什么規(guī)律,隨即意識(shí)到自己的研究思路有點(diǎn)兒問題,種子的這段程序一定是進(jìn)化而來的,也就是說它的代碼本身也是在不斷演變的,自己這樣靜態(tài)的看,本身就有問題。
既然意識(shí)到了問題,肖遠(yuǎn)馬上改變了策略,將多個(gè)內(nèi)存樣本中的種子程序的二進(jìn)制代碼截取了出來,然后對這些不同時(shí)間點(diǎn)的二進(jìn)制代碼進(jìn)行了縱向比對,重點(diǎn)關(guān)注了那段奇異代碼的演化過程,并不斷對比手邊的cpu指令手冊。
經(jīng)過一番比對,肖遠(yuǎn)又想到種子程序的進(jìn)化還受到god程序的影響,于是又將god程序代碼拿來,橫向縱向做了很全面的分析比對,兩個(gè)小時(shí)后,他終于搞明白了這段代碼的來歷,心中卻暗暗驚異。
首先要確定的一點(diǎn),這段代碼并不是憑空產(chǎn)生的,種子程序雖然具有一些初步的進(jìn)化功能,但是還沒有智能化到自主的分析cpu指令集,并加以利用的逆天程度,但是它的來源卻也讓肖遠(yuǎn)感到了一場驚奇,因?yàn)檫@段代碼是從god程序中學(xué)習(xí)而來的,而god的程序中的這段代碼來自于匯編時(shí),匯編程序?qū)λM(jìn)行的自動(dòng)優(yōu)化。
更讓肖遠(yuǎn)感到驚訝還有另外一件事情,種子程序?qū)W習(xí)到的這段代碼竟然利用了god程序自身的監(jiān)控機(jī)制存在的一個(gè)漏洞,執(zhí)行后悔進(jìn)行跨區(qū)段遠(yuǎn)程跳轉(zhuǎn),將自己復(fù)制到了god程序的代碼段中,而肖遠(yuǎn)設(shè)定的種子規(guī)則中,有一條是禁止種子進(jìn)行自我復(fù)制繁衍,因此當(dāng)種子將自己復(fù)制到god代碼段中時(shí),世界中的種子自動(dòng)進(jìn)行了自我銷毀。
種子侵占了god程序的代碼段,結(jié)果導(dǎo)致與god程序代碼段有一部分被破壞掉了,從而失去了一部分功能,而這部分功能恰恰是世界的平衡修復(fù)功能,因此才會(huì)出現(xiàn)種子突然消失后,世界中雖然存在大量不平衡,但是god卻沒有再對其進(jìn)行修復(fù)的現(xiàn)象。
而種子在進(jìn)入god程序的代碼段之后,自身安全的到了保障,再也沒有被修改或抹殺的危險(xiǎn)存在,于是按照肖遠(yuǎn)最初設(shè)定的進(jìn)化模型,它的自我進(jìn)化也就停了下來,代碼也不再運(yùn)行。
“真想不到啊,這段程序竟然能夠找到god程序的一個(gè)漏洞,究竟是巧合呢,還是它自我進(jìn)化的原因,我需要再做一下試驗(yàn)……”
肖遠(yuǎn)發(fā)現(xiàn)了有些很有意思的東西,進(jìn)而產(chǎn)生了一些新的想法,于是再做幾個(gè)試驗(yàn),加以驗(yàn)證,如果這些想法成立的話,他覺得自己似乎找到了一個(gè)非常實(shí)用的大殺器。