A. 如何防止緩存代碼溢出執行
你把菜單欄里「工具」—「配置」裡面的第一項「常規」里的「磁碟緩存」設小些試一下!
設小些,一般是1024KB或是2048KB,和文件長度沒有關系的,這個「緩存」的意思就是每當下載1024KB或2048KB的時候再存到你的硬碟里,之前是存在緩存里的。
些Sasser代碼(可以說是插件或木馬之類)穿過未打補丁的防火牆,到達沒有防護的伺服器。當代碼進入沒有防護伺服器的內存時,它馬上執行緩存器溢出,將伺服器系統級的控制權交給了遠端的主機,實現在企業網內的遠程式控制制。
卡巴六正是針對Web瀏覽器或者其他最終用戶網路應用的的漏洞防禦,並可以檢測和防止受保護計算機上運行的任何應用遭受緩存溢出攻擊,防治計算機收到傷害,你拒絕的時候沒有「以後都這樣操作」的提示嗎?如果沒有,建議不要瀏覽該網頁了!
溫馨提醒:上網的時候最好不要用IE上網,因為80%病毒都是針對IE的(也就是WINDOW),如果使用第三方面的瀏覽器,將會大大降低中毒的幾率!
B. 緩沖區溢出的基本原理是什麼
緩沖區溢出的原理:
通過往程序的緩沖區寫超出其長度的內容,造成緩沖區的溢出,從而破壞程序的堆棧,使程序轉而執行其它指令,以達到攻擊的目的。造成緩沖區溢出的原因是程序中沒有仔細檢查用戶輸入的參數。例如下面程序:
void function(char *str) {
char buffer[16];
strcpy(buffer,str);
}
上面的strcpy()將直接吧str中的內容到buffer中。這樣只要str的長度大於16,就會造成buffer的溢出,使程序運行出錯。存在象strcpy這樣的問題的標准函數還有strcat(),sprintf(),vsprintf(),gets(),scanf()等。
漏洞:
緩沖區溢出攻擊的目的在於擾亂具有某些特權運行的程序的功能,這樣可以使得攻擊者取得程序的控制權,如果該程序具有足夠的許可權,那麼整個主機就被控制了。一般而言,攻擊者攻擊root程序,然後執行類似「exec(sh)」的執行代碼來獲得root許可權的shell。為了達到這個目的,攻擊者必須達到如下的兩個目標:
在程序的地址空間里安排適當的代碼。
通過適當的初始化寄存器和內存,讓程序跳轉到入侵者安排的地址空間執行。
可以根據這兩個目標來對緩沖區溢出攻擊進行分類。
以上內容參考:網路-緩沖區溢出
C. 如何防止內存溢出
避免內存泄漏的幾點建議:
1、盡早釋放無用對象的引用。
2、避免在循環中創建對象。
3、使用字元串處理時避免使用String,應使用StringBuffer。
4、盡量少使用靜態變數,因為靜態變數存放在永久代,基本不參與垃圾回收。
D. 怎麼解決緩沖區溢出的問題啊``各位大俠請指點!謝了!!
緩沖區溢出是指當計算機程序向緩沖區內填充的數據位數超過了緩沖區本身的容量。溢出的數據覆蓋在合法數據上。理想情況是,程序檢查數據長度並且不允許輸入超過緩沖區長度的字元串。但是絕大多數程序都會假設數據長度總是與所分配的存儲空間相匹配,這就為緩沖區溢出埋下隱患。操作系統所使用的緩沖區又被稱為堆棧,在各個操作進程之間,指令被臨時存儲在堆棧當中,堆棧也會出現緩沖區溢出。
當一個超長的數據進入到緩沖區時,超出部分就會被寫入其他緩沖區,其他緩沖區存放的可能是數據、下一條指令的指針,或者是其他程序的輸出內容,這些內容都被覆蓋或者破壞掉。可見一小部分數據或者一套指令的溢出就可能導致一個程序或者操作系統崩潰。
緩沖區溢出是由編程錯誤引起的。如果緩沖區被寫滿,而程序沒有去檢查緩沖區邊界,也沒有停止接收數據,這時緩沖區溢出就會發生。緩沖區邊界檢查被認為是不會有收益的管理支出,計算機資源不夠或者內存不足是編程者不編寫緩沖區邊界檢查語句的理由,然而摩爾定律已經使這一理由失去了存在的基礎,但是多數用戶仍然在主要應用中運行十年甚至二十年前的程序代碼。
緩沖區溢出之所以泛濫,是由於開放源代碼程序的本質決定的。一些編程語言對於緩沖區溢出是具有免疫力的,例如Perl能夠自動調節位元組排列的大小,Ada95能夠檢查和阻止緩沖區溢出。但是被廣泛使用的C語言卻沒有建立檢測機制。標准C語言具有許多復制和添加字元串的函數,這使得標准C語言很難進行邊界檢查。C++略微好一些,但是仍然存在緩沖區溢出。一般情況下,覆蓋其他數據區的數據是沒有意義的,最多造成應用程序錯誤,但是,如果輸入的數據是經過「黑客」或者病毒精心設計的,覆蓋緩沖區的數據恰恰是「黑客」或者病毒的入侵程序代碼,一旦多餘位元組被編譯執行,「黑客」或者病毒就有可能為所欲為,獲取系統的控制權。
使用一組或多組附加驅動器存儲數據的副本,這就叫數據冗餘技術。比如鏡像就是一種數據冗餘技術。
E. 內存溢出錯誤怎麼解決
你好,內存溢出可能是病毒作怪,也有可能是程序錯誤.
內存溢出是指系統內存全部被佔用,沒有可用內存分配給新啟動的任務的情況,通常不會導致系統崩潰。
可以擴展一條內存,或者增大虛擬內存的大小
下面以在Windows XP下轉移虛擬內存所在盤符為例介紹虛擬內存的設置方法:
一、手動設置虛擬內存
在默認狀態下,是讓系統管理虛擬內存的,但是系統默認設置的管理方式通常比較保守,在自動調節時會造成頁面文件不連續,而降低讀寫效率,工作效率就顯得不高,於是經常會出現「內存不足」這樣的提示,下面就讓我們自已動手來設置它吧。
①用右鍵點擊桌面上的「我的電腦」圖標,在出現的右鍵菜單中選擇「屬性」選項打開「系統屬性」窗口。在窗口中點擊「高級」選項卡,出現高級設置的對話框.
②點擊「性能」區域的「設置」按鈕,在出現的「性能選項」窗口中選擇「高級」選項卡,打開其對話框。
③在該對話框中可看到關於虛擬內存的區域,點擊「更改」按鈕進入「虛擬內存」的設置窗口。選擇一個有較大空閑容量的分區,勾選「自定義大小」前的復選框,將具體數值填入「初始大
二、量身定製虛似內存
1.普通設置法
根據一般的設置方法,虛擬內存交換文件最小值、最大值同時都可設為內存容量的1.5倍,但如果內存本身容量比較大,比如內存是512MB,那麼它佔用的空間也是很可觀的。所以我們可以這樣設定虛擬內存的基本數值:內存容量在256MB以下,就設置為1.5倍;在512MB以上,設置為內存容量的一半;介於256MB與512MB之間的設為與內存容量相同值。
2.精準設置法
由於每個人實際操作的應用程序不可能一樣,比如有些人要運行3DMAX、Photoshop等這樣的大型程序,而有些人可能只是打打字、玩些小游戲,所以對虛擬內存的要求並不相同,於是我們就要因地制宜地精確設置虛擬內存空間的數值。
①先將虛擬內存自定義的「初始大小」、「最大值」設為兩個相同的數值,比如500MB;
②然後依次打開「控制面板→管理工具→性能」,在出現的「性能」對話框中,展開左側欄目中的「性能日誌和警報」,選中其下的「計數器日誌」,在右側欄目中空白處點擊右鍵,選擇右鍵菜單中的「新建日誌設置」選項;
③在彈出的對話框「名稱」一欄中填入任意名稱,比如「虛擬內存測試」。在出現窗口中點擊「添加計數器」按鈕進入下一個窗口;
④在該窗口中打開「性能對象」的下拉列表,選擇其中的「Paging File」,勾選「從列表中選擇計數器」,並在下方的欄目中選擇「%Usage Peak」;勾選「從列表中選擇範例」,在下方的欄目中選擇「_Total」,再依次點擊「添加→關閉」結束
⑥在右側欄目中可以發現多了一個「虛擬內存測試」項目,如果該項目為紅色則說明還沒有啟動,點擊該項,選擇右鍵菜單中的「啟動」選項即可
接下來運行自己常用的一些應用程序,運行一段時間後,進入日誌文件所在的系統分區下默認目錄「PerfLogs」,找到「虛擬內存測試_000001.csv」並用記事本程序打開它,在該內容中,我們查看每一欄中倒數第二項數值,這個數值是虛擬內存的使用比率,找到這項數值的最大值,比如圖中的「46」,用46%乘以500MB(前面所設定的虛擬內存數值),得出數值為230MB。
用該數值可以將初始大小設為230MB,而最大值可以根據磁碟空間大小自由設定,一般建議將它設置為最小值的2到3倍。這樣我們就可以將虛擬內存打造得更精準,使自己的愛機運行得更加流暢、更具效率。
小」、「最大值」欄中,而後依次點擊「設置→確定」按鈕即可,最後重新啟動計算機使虛擬內存設置生效。
建議:可以劃分出一個小分區專門提供給虛擬內存、IE臨時文件存儲等使用,以後可以對該分區定期進行磁碟整理,從而能更好提高計算機的工作效率。
三、Windows虛擬內存加速密籍
虛擬內存對於任何版本的Windows而言都是十分重要的。如果設置得當,它將極大地提升電腦的性能和運行速度。可是在默認狀態下,Windows始終將虛擬內存設為物理內存的1.5倍。這樣的話,如果用戶安裝2GB的內存,系統就會騰出高達3GB的硬碟空間作為虛擬內存。但以當前的主流應用軟體和游戲對內存的需要來看,根本沒有必要使用這么多的虛擬內存。那麼,有沒有什麼秘技或絕招可使虛擬內存運用得更有效率或更顯性能呢?
1、分割存於多個硬碟
將虛擬內存設在較快的硬碟上,的確可使虛擬內存的運作更有效率。但是若電腦上兩個硬碟速度一樣快,則應將虛擬內存平均分配在兩個不同的硬碟上(並非同一硬碟的不同分區)。因為同步進行讀寫操作會更有效地提高系統整體的虛擬內存性能。
舉個例子,假設你原本在硬碟C上設置了700MB的虛擬內存,現在你可嘗試重新分配,即把硬碟C改為350MB,硬碟D新增350MB的虛擬內存。理論上這樣做會加快虛擬內存整體的讀寫操作.
2、硬碟需有足夠空間
如果你不是很有經驗的電腦用戶,又或者沒有特殊的使用要求,在Windows XP中選擇「系統管理的大小」的方法來自動處理虛擬內存,一般情況下應該會比選擇「自定義大小」的方法來得安全和穩定。不過,有一點大家必須注意,由於虛擬內存的「頁面文件」(pagefile.sys)會隨著電腦使用過程進行收縮和擴展,為使系統管理虛擬內存能夠進行得順利和更具彈性,我們必須保證分頁文件所在的硬碟擁有足夠的可用空間。
3、最小值等於最大值
選擇「自定義大小」的方法來處理虛擬內存,並將最大值和最小值都設為同一數值。有很多人都相信用這種方法來處理虛擬內存有助於提高系統的性能。他們所持的理由是,當最大值和最小值都相等時,系統無需時刻進行收縮和擴展頁面文件的動作。省去了這些工作,相應地就是提高系統效率。
這種方法,很多人堅信有效,但同樣地,也有人指出其實並沒有效果。但不管怎樣也好,如要將最大值和最小值設為相等,我們必須堅守一個原則,那就是虛擬內存的大小必須足夠,否則系統輕則會出現效率下降(要進行更多復寫動作來騰出空間),嚴重的更會造成系統不穩定。
4、整理頁面文件
文件數據保存在硬碟上久了,文件碎片(fragment)自然會產生。要保持或提高硬碟的工作效率,我們應不時為硬碟進行一次碎片整理。所謂虛擬內存,其實也是硬碟上的資料文件,那麼虛擬內存是否也應該像普通文件般需要整理呢?
Windows系統處理頁面文件(即虛擬內存)的方法有別於一般的文件。相比之下,頁面文件比一般文件更少出現碎片,為頁面文件進行整理通常是沒有必要的。事實上,當Windows XP進行磁碟碎片整理時,頁面文件不會牽涉其中。
雖然Windows不會對頁面文件進行整理,但事實上頁面文件也有碎片存在。追求「盡善盡美」的朋友可能仍想對頁面文件進行碎片整理。大家不妨試試下面的方法:
在桌面「我的電腦」圖標上單擊滑鼠右鍵,在隨後出現的功能菜單中選「屬性」。進入系統屬性的設置窗口,用滑鼠點選「高級」-->「性能」-->「設置」-->「高級」-->「更改」,在隨後出現的「虛擬內存」設置窗口中選中「無分頁文件」一項。最後單擊「設置」按鈕退出,並重新啟動電腦。
重新啟動後,檢查一下磁碟根目錄中還有沒有pagefile.sys頁面文件存在,如有就將之刪除。清除掉虛擬內存的頁面文件後,現在我們再進行磁碟碎片整理。完成後,按照前面的步驟重新設置一定數量的虛擬內存,並啟動電腦使之生效。經上述方法處理後,新得出的頁面文件將會是沒有碎片的。
另外,如果想查看頁面文件碎片的具體情況呢?啟動磁碟碎片整理程序,為存在有頁面文件的硬碟進行一次「分析」,再點選「查看報告」,看看「頁面文件碎片」一欄便會一目瞭然。
四、虛擬內存的理想大小及准確定位
1、虛擬內存的理想大小
想以「自定義大小」的方法來處理虛擬內存,究竟應該設置多大的虛擬內存呢?在Windows XP中,如果由操作系統自己定義虛擬內存,系統通常會把最小值設置為物理內存的1.5倍。當擴展時,最大值則介於物理內存的2.5至3倍。一般情況下,用戶想自定義虛擬內存的大小,均可參照這個比例設置。
真的要參照這個比例嗎?如果我的電腦上有1GB的內存,難不成最小值要設置為1.5GB,最大值是2.5至3GB。這樣一來。Pagefile.sys頁面文件至少為1.5GB,太不現實了!
其實,大內存的系統跟小內存的系統相比,在設置虛擬內存時,標准有些不同。
如果大家有512MB以上甚至1GB的內存,既然物理內存已經相當充足,所需的虛擬內存反而應該減少。故在大內存的系統中,虛擬內存的最小值可以設成物理內存的一半。比如有1GB的內存,虛擬內存的最小值設成512MB,最大值則維持3GB以備不時之需。注意:雖然最大值設為3GB,系統是不會立即出現3GB大小的pagefile.sys文件,實際上它首先會以最小值出現,待有擴展需要時才會遞增。
另外,有些大內存的朋友,可能會乾脆不設置虛擬內存,以此強迫系統使用速度較快的內存。其實這是不太明智的做法。正所謂凡事都不要做得太絕對,完全沒有虛擬內存也不行。原因是不少應用程序在設計時要求必須使用虛擬內存,沒有了就會造成系統不穩定或死機。
至於小內存的系統,例如256MB,參照1.5倍及3倍的設置比例最穩當。即虛擬內存最小值設為384MB,最大值768MB。
2、手工訂制最准確的虛擬內存
0.5倍、1.5倍、3倍,哇!好像買衣服時分大、中、小號,完全沒有個性。究竟設置虛擬內存有沒有更「貼身剪裁」的方法呢?
在Windows XP桌面的「開始」→「運行」中輸入perfmon.msc,一個與系統性能有關的監視器便會出現。看看顯示器的底部,有三個計數器(pages/sec、Avg.Disk Queue Length及rocessor Time,)。為了便於我們接下來對虛擬內存的頁面文件進行精確監測,現在請大家將這三個計數器逐一點選,並按鍵盤上的Delete鍵將它們刪除。請大家放心,刪除後,下次再啟動系統性能監視器時,這三個項目會重新出現。
刪除後,現在請在圖表中央位置單擊滑鼠右鍵,在隨後出現的功能菜單中點選「添加計數器」一項,跟著在跳出窗口的「性能對象」一欄選「Process」。之後再在「從列表選擇」一欄中點選「Page File Bytes」。不清楚「Page File Bytes」代表什麼意思,只要單擊「說明」按鈕,解說文字便會出現在對話框之下。
選定「Page File Bytes」後,再在右方的「從列表選擇範例」一欄選取「Total」項,之後依次單擊「添加」和「關閉」按鈕,一個名為「Page File Bytes」的計數器便會出現在性能監視器的下方中。
重復以上的動作,再添加一個名為「Page File Bytes Peak」的計數器(即Process下面的Page File Bytes Peak)。
現在,回頭看一下監視器,圖表中應該正在顯示並計量著剛才新增加的兩個計數器。如無意外,這兩個計數器在圖表上的顯示不正確,即數值靠近最高比例線,沒有動態變化。不用怕,這並不表示你的電腦出了什麼問題,而是圖表比例設得不太恰當而已!用滑鼠右鍵逐一單擊監視器底部的「Page Fele Bytes」和「Page File By8tes Peak」計數器,並選「屬性」一項。在「數據」頁面的「比例」一欄中改為0.0000001,這樣顯示器中的圖表便不再是沒有動靜了。
如果你看過系統提供的說明,相信應該知道「Page File Bytes」和「Page File Bytes Peak」正是代表了系統監測期間所使用的虛擬內存及其峰值是多大。因此,需要精確地手工設置虛擬內存,可參考圖表下方顯示的數字,其單位是Bytes
想知道在正常的情況下,你的系統會耗用多少虛擬內存?請將平時日常使用的應用軟體同時啟動並讓它們開始工作,接著再看性能監視器上所顯示的數值,心中有數了吧。
人總有瘋狂的時候,想知道自己瘋狂使用電腦時系統需要多少虛擬內存,現在就盡情地將電腦上的程序啟動並運行(例如,開十多個IE瀏覽器窗口上網,播放MP3和DVD影片,再進行光碟刻錄或DV影片壓縮編碼),看看監視器的百分比會升高到多少。
在圖表上右擊滑鼠,點選「屬性」,進入「圖表」頁面勾選「水平格線」一項。這樣圖表中會出現一條條的水平分割線,是不是好分辨了?
圖表中的紅色垂直線跑得太快,來不及開啟電腦上的程序進行測試?
同樣,在圖表上單擊滑鼠右鍵,選「屬性」,在常規頁面的「自動抽樣間隔」一項中將1秒改為5秒。此時,圖表中的「圖形時間」數值便會由1分40秒變成8分20秒。換言之,紅色垂直線走完一圈需花費8分20秒,這個時間應該足以讓大家開啟並運行很多應用程序,然後再慢慢查看圖表中的結果。
最後,通過監視器的圖表,相信大家已經能粗略估計你的電腦系統應設置多大的虛擬內存了。
五、出現「虛擬內存不夠」的幾個可能
1、感染病毒
有些病毒發作時會佔用大量內存空間,導致系統出現內存不足的問題。趕快去殺毒,升級病毒庫,然後把防毒措施做好!
2、虛擬內存設置不當
虛擬內存設置不當也可能導致出現內存不足問題,一般情況下,虛擬內存大小為物理內存大小的2倍即可,如果設置得過小,就會影響系統程序的正常運行。重新調整虛擬內存大小以WinXP為例,右鍵點擊「我的電腦」,選擇「屬性」,然後在「高級」標簽頁,點擊「性能」框中的「設置」按鈕,切換到「高級」標簽頁,然後在「虛擬內存」框中點擊「更改」按鈕,接著重新設置虛擬內存大小,完成後重新啟動系統就好了。
3、系統空間不足
虛擬內存文件默認是在系統盤中,如WinXP的虛擬內存文件名為「pagefile.sys」,如果系統盤剩餘空間過小,導致虛擬內存不足,也會出現內存不足的問題。系統盤至少要保留300MB剩餘空間,當然這個數值要根據用戶的實際需要而定。用戶盡量不要把各種應用軟體安裝在系統盤中,保證有足夠的空間供虛擬內存文件使用,而且最好把虛擬內存文件安放到非系統盤中。
4、因為SYSTEM用戶許可權設置不當
基於NT內核的Windows系統啟動時,SYSTEM用戶會為系統創建虛擬內存文件。有些用戶為了系統的安全,採用NTFS文件系統,但卻取消了SYSTEM用戶在系統盤「寫入」和「修改」的許可權,這樣就無法為系統創建虛擬內存文件,運行大型程序時,也會出現內存不足的問題。問題很好解決,只要重新賦予SYSTEM用戶「寫入」和「修改」的許可權即可,不過這個僅限於使用NTFS文件系統的用戶。
六、虛擬內存的優化
1. 啟用磁碟寫入緩存
在「我的電腦」上單擊滑鼠右鍵選擇「屬性->硬體」,打開設備管理器找到當前正在使用的硬碟,單擊滑鼠右鍵選擇屬性。在硬碟屬性的的「策略」頁中,打開「啟用磁碟上的寫入緩存」。
這個選項將會激活硬碟的寫入緩存,從而提高硬碟的讀寫速度。不過要注意一點,這個功能打開後,如果計算機突然斷電可能會導致無法挽回的數據丟失。因此最好在有UPS的情況下再打開這個功能。當然,如果你平常使用計算機時不要進行什麼重要的數據處理工作,沒有UPS也無所謂,這個功能不會對系統造成太大的損失。
2. 打開Ultra MDA
在設備管理其中選擇IDE ATA/ATAPI控制器中的「基本/次要IDE控制器」,單擊滑鼠右鍵選擇「屬性」,打開「高級設置」頁。這里最重要的設置項目就是「傳輸模式」,一般應當選擇「DMA(若可用)」。
3. 配置恢復選項
Windows XP 運行過程中碰到致命錯誤時會將內存的快照保存為一個文件,以便進行系統調試時使用,對於大多數普通用戶而言,這個文件是沒有什麼用處的,反而會影響虛擬內存的性能。所以應當將其關閉。
在「我的電腦」上單擊滑鼠右鍵,選擇「屬性->高級」,在「性能」下面單擊「設置」按鈕,在「性能選項」中選擇「高級」頁。這里有一個「內存使用」選項,如果將其設置為「系統緩存」,Windows XP 將使用約4MB的物理內存作為讀寫硬碟的緩存,這樣就可以大大提高物理內存和虛擬內存之間的數據交換速度。默認情況下,這個選項是關閉的,如果計算機的物理內存比較充足,比如256M或者更多,最好打開這個選項。但是如果物理內存比較緊張,還是應當保留默認的選項。
七、頁面文件的設置
1、頁面文件的大小計算
對於不同的計算機而言,頁面文件的大小是各不相同的。關於頁面文件大小的設置,有兩個流傳甚廣的「公式」,「物理內存X2.5」或者「物理內存X1.5」。這兩種計算方法固然簡便,但是並不適用於所有的計算機。設置頁面文件大小最准確的方法是看看計算機在平常運行中實際使用的頁面文件大小。
通過Windows XP自帶的日誌功能可以監視計算機平常使用的頁面文件的大小,從而進行最准確的設置,具體步驟如下。
一、在「我的電腦」上單擊滑鼠右鍵,選擇「屬性->高級」,單擊「性能」下面的「設置」按鈕,然後選擇「高級」頁,單擊「虛擬內存」下方的「更改」按鈕。選擇「自定義大小」,並將「起始大小」和「最大值」都設置為300M,這只是一個臨時性的設置。設置完成後重新啟動計算機使設置生效。
二、進入「控制面板->性能與維護->管理工具」,打開「性能」,展開「性能日誌和警告」,選擇「計數器日誌」。在窗口右側單擊滑鼠右鍵選擇「新建日誌設置」
三、隨便設置一個日誌名稱,比如「監視虛擬內存大小」。
四、在「常規」頁中單擊「添加計數器」按鈕。
在「性能對象」中選擇「Paging File」,然後選中「從列表選擇記數器」下面的「%Usage Peak」,並在右側「從列表中選擇範例」中選擇「_Total」。最後單擊「添加」和「關閉」按鈕。
五、別忘了記住「日誌文件」頁中的日誌文件存放位置和文件名,我們後面需要查看這個日誌來判斷Windows XP平常到底用了多少虛擬內存,在這個例子中,日誌文件被存放在D:Perflog目錄下。
另外還要設置「日誌文件類型」為「文本文件」,這樣便於閱讀。
這時你可以看到剛才新建的日誌條目前面的圖標變成了綠色,這表明日誌系統已經在監視虛擬內存了。如果圖標還是紅色,你應該單擊滑鼠右鍵選擇「開始」來啟動這個日誌。
過一段時間後打開這個CVS文件,我們可以看到如下內容的條目。
這個日誌文件記錄這一段時間中頁面文件的使用情況,注意這里的單位是%,而不是MB。通過簡單的計算,我們就可以得到頁面文件的最小尺寸,公式是「頁面文件尺寸X百分比」。比如這個例子中,虛擬內存最大的使用比率是31%,300MBX31%=93MB,這個值就是虛擬內存的最小值(注意,300MB是前面的設置的臨時值)。
如果物理內存較大,可以考慮將頁面文件的「起始大小」和「最大值」設置為相等,等於上一步中計算出來的大小。這樣硬碟中不會因為頁面文件過渡膨脹產生磁碟碎片,其副作用是由於「最大值」被設置的較小,萬一偶然出現虛擬內存超支的情況,可能會導致系統崩潰。
2、設置頁面文件
現在回到「虛擬內存」的設置對話框中選擇自定義大小並按照上面的計算結果分別設置「初始大小」和「最大值」。這里我們將「初始大小」設置為91M,而將「最大值」設置成了200M,這樣比較保險
3、對頁面文件進行碎片整理
Windows XP運行時需要大量訪問頁面文件,如果頁面文件出現碎片,系統性能將會受到嚴重影響,而且會縮短硬碟的使用壽命。所以我們很有必要對頁面文件定期進行碎片整理。
不過別忘了,頁面文件是系統關鍵文件,Windows XP運行時無法對其進行訪問。所以對它進行碎片整理並不是一件容易的事情。我們有兩種方案可以選擇,一是安裝Windows雙系統,然後啟動另外一個Windows對Windows XP所在的分區進行碎片整理。二是使用專門的工具軟體,比如System File Defragmenter等。
參考文獻:http://iask.sina.com.cn/b/11733461.html
F. 緩沖區溢出怎麼解決
1重啟後一定不要取消殺毒,讓殺毒軟體在進入XP界面前先殺個毒,
2如果下載不了殺毒軟體就在另外一台機子上下載360修復專家(或者'windows清理助手'或'惡意軟體清理助手'),如果不行再一項一項的殺,不要怕麻煩,除非你想重做系統。
(如果再打不開可以把360.exe改成360.scr 然後運行安裝,安裝好之後,把360的主程序的後綴名也要改成*.scr 這樣在運行 。因為scr和exe的初始化不一樣。。所以改後綴名即可。。然後在360裡面安裝一個專殺工具~!記得,要先斷網哦~)!
3,運行安全360,修復IE ,清理一下,然後到安全模式下殺毒。這問題我也剛才遇到一般就可以解決。
然後給系統減負.
G. 如何防止緩沖區溢出
緩沖區溢出主要是一個 C/C++ 問題。盡管在通常情況下它很容易修補。但它們仍然是一種對安全代碼的威脅。不管是用戶也好,程序的攻擊者也好,當提供的數據長度大於應用程序預期的長度時,便會發生緩沖區溢出,此時數據會溢出到內部存儲器空間。有兩種緩沖區溢出不明顯且難以修復。一是開發人員沒有預料到外部提供的數據會比內部緩沖區大。溢出導致了內存中其他數據結構的破壞,這種破壞通常會被攻擊者利用,以運行惡意代碼。二是數組索引錯誤也會造成緩沖區下溢和超限,但這種情況沒那麼普遍。請看以下 C++ 代碼片段: void DoSomething(char *cBuffSrc, DWORD cbBuffSrc)
{
char cBuffDest[32];
memcpy(cBuffDest,cBuffSrc,cbBuffSrc);
}
問題在哪裡呢?事實上,如果 cBuffSrc 和 cbBuffSrc 來自可信賴的源(例如不信任數據並因此而驗證數據的有效性和大小的代碼),則這段代碼沒有任何問題。然而,如果數據來自不可信賴的源,也未得到驗證,那麼攻擊者(不可信賴源)很容易就可以使 cBuffSrc 比 cBuffDest 大,同時也將 cbBuffSrc 設定為比 cBuffDest 大。當 memcpy 將數據復制到 cBuffDest 中時,來自 DoSomething 的返回地址就會被更改,因為 cBuffDest 在函數的堆棧框架上與返回地址相鄰,此時攻擊者即可通過代碼執行一些惡意操作。彌補的方法就是不要信任用戶的輸入,並且不信任 cBuffSrc 和 cbBuffSrc 中攜帶的任何數據:
void DoSomething(char *cBuffSrc, DWORD cbBuffSrc)
{
const DWORD cbBuffDest = 32;
char cBuffDest[cbBuffDest];
#ifdef _DEBUG
memset(cBuffDest, 0x33, cbBuffSrc);
#endif
memcpy(cBuffDest, cBuffSrc, min(cbBuffDest, cbBuffSrc));
}
此函數展示了一個能夠減少緩沖區溢出的正確編寫的函數的三個特性。首先,它要求調用者提供緩沖區的長度。當然,您不能盲目相信這個值!接下來,在一個調試版本中,代碼將探測緩沖區是否真的足夠大,以便能夠存放源緩沖區。如果不能,則可能觸發一個訪問沖突並把代碼載入調試器。在調試時,您會驚奇地發現竟有如此多的錯誤。最後也是最重要的是,對 memcpy 的調用是防禦性的,它不會復制多於目標緩沖區存放能力的數據
H. 如何避免溢出(計算機)
內存溢出已經是軟體開發歷史上存在了近40年的「老大難」問題,象在「紅色代碼」病毒事件中表現的那樣,它已經成為黑客攻擊企業網路的「罪魁禍首」。
如在一個域中輸入的數據超過了它的要求就會引發數據溢出問題,多餘的數據就可以作為指令在計算機上運行。據有關安全小組稱,操作系統中超過50%的安全漏洞都是由內存溢出引起的,其中大多數與微軟的技術有關。
微軟的軟體是針對台式機開發的,內存溢出不會帶來嚴重的問題。但現在台式機一般都連上了互聯網,內存溢出就為黑客的入侵提供了便利條件。
如何解決溢出內存問題
下面討論內存溢出問題的解決和預防措施。
1、改用受控代碼
2002 年 2 月和 3 月,微軟公司展開了 Microsoft Windows Security Push 活動。在此期間,我所在的小組一共培訓了超過 8500 人,教授他們如何在設計、測試和文檔編制過程中解決安全問題。在我們向所有程序設計人員提出的建議中,有一條就是:緊跟微軟公司軟體開發策略的步伐,將某些應用程序和工具軟體由原先基於本地 Win32 的 C++ 代碼改造成基於 .NET 的受控代碼。我們的理由很多,但其中最根本的一條,就是為了解決內存溢出問題。基於受控代碼的軟體發生內存溢出問題的機率要小得多,因為受控代碼無法直接存取系統指針、寄存器或者內存。作為開發人員,你應該考慮(至少是打算)用受控代碼改寫某些應用程序或工具軟體。例如:企業管理工具就是很好的改寫對象之一。當然,你也應該很清楚,不可能在一夜之間把所有用 C++ 開發的軟體用 C# 之類的受控代碼語言改寫。
2、遵守黃金規則
當你用 C/C++ 書寫代碼時,應該處處留意如何處理來自用戶的數據。如果一個函數的數據來源不可靠,又用到內存緩沖區,那麼它就必須嚴格遵守下列規則:
必須知道內存緩沖區的總長度。
檢驗內存緩沖區。
提高警惕。
讓我們來具體看看這些「黃金規則」:
(1)必須知道內存緩沖區的總長度。
類似這樣的代碼就有可能導致 bug :
void Function(char *szName) {
char szBuff[MAX_NAME];
// 復制並使用 szName
strcpy(szBuff,szName);
}
它的問題出在函數並不知道 szName 的長度是多少,此時復制數據是不安全的。正確的做法是,在復制數據前首先獲取 szName 的長度:
void Function(char *szName, DWORD cbName) {
char szBuff[MAX_NAME];
// 復制並使用 szName
if (cbName < MAX_NAME)
strcpy(szBuff,szName);
}
這樣雖然有所改進,可它似乎又過於信任 cbName 了。攻擊者仍然有機會偽造 czName 和 szName 兩個參數以謊報數據長度和內存緩沖區長度。因此,你還得檢檢這兩個參數!
(2)檢驗內存緩沖區
如何知道由參數傳來的內存緩沖區長度是否真實呢?你會完全信任來自用戶的數據嗎?通常,答案是否定的。其實,有一種簡單的辦法可以檢驗內存緩沖區是否溢出。請看如下代碼片斷:
void Function(char *szName, DWORD cbName) {
char szBuff[MAX_NAME];
// 檢測內存
szBuff[cbName] = 0x42;
// 復制並使用 szName
if (cbName < MAX_NAME)
strcpy(szBuff,szName);
}
這段代碼試圖向欲檢測的內存緩沖區末尾寫入數據 0x42 。你也許會想:真是多此一舉,何不直接復制內存緩沖區呢?事實上,當內存緩沖區已經溢出時,一旦再向其中寫入常量值,就會導致程序代碼出錯並中止運行。這樣在開發早期就能及時發現代碼中的 bug 。試想,與其讓攻擊者得手,不如及時中止程序;你大概也不願看到攻擊者隨心所欲地向內存緩沖區復制數據吧。
(3)提高警惕
雖然檢驗內存緩沖區能夠有效地減小內存溢出問題的危害,卻不能從根本上避免內存溢出攻擊。只有從源代碼開始提高警惕,才能真正免除內存溢出攻擊的危脅。不錯,上一段代碼已經很對用戶數據相當警惕了。它能確保復制到內存緩沖區的數據總長度不會超過 szBuff 的長度。然而,某些函數在使用或復制不可靠的數據時也可能潛伏著內存溢出漏洞。為了檢查你的代碼是否存在內存溢出漏洞,你必須盡量追蹤傳入數據的流向,向代碼中的每一個假設提出質疑。一旦這么做了,你將會意識到其中某些假設是錯誤的;然後你還會驚訝地叫道:好多 bug 呀!
在調用 strcpy、strcat、gets 等經典函數時當然要保持警惕;可對於那些所謂的第 n 版 (n-versions) strcpy 或 strcat 函數 —— 比如 strncpy 或 strncat (其中 n = 1,2,3 ……) —— 也不可輕信。的確,這些改良版本的函數是安全一些、可靠一些,因為它們限制了進入內存緩沖區的數據長度;然而,它們也可能導致內存溢出問題!請看下列代碼,你能指出其中的錯誤嗎?
#define SIZE(b) (sizeof(b))
char buff[128];
strncpy(buff,szSomeData,SIZE(buff));
strncat(buff,szMoreData,SIZE(buff));
strncat(buff,szEvenMoreData,SIZE(buff));
給點提示:請注意這些字元串函數的最後一個參數。怎麼,棄權?我說啊,如果你是執意要放棄那些「不安全」的經典字元串函數,並且一律改用「相對安全」的第 n 版函數的話,恐怕你這下半輩子都要為了修復這些新函數帶來的新 bug 而疲於奔命了。呵呵,開個玩笑而已。為何這么說?首先,它們的最後一個參數並不代表內存緩沖區的總長度,它們只是其剩餘空間的長度;不難看出,每執行完一個 strn... 函數,內存緩沖區 buff 的長度就減少一些。其次,傳遞給函數的內存緩沖區長度難免存在「大小差一」(off-by-one)的誤差。你認為在計算 buff 的長度時包括了字元串末尾的空字元嗎?當我向聽眾提出這個問題時,得到的肯定答復和否定答復通常是 50 比 50 ,對半開。也就是說,大約一半人認為計算了末尾的空字元,而另一半人認為忽略了該字元。最後,那些第 n 版函數所返回的字元串不見得以空字元結束,所以在使用前務必要仔細閱讀它們的說明文檔。
3、編譯選項 /GS
「/GS」是 Visual C++ .NET 新引入的一個編譯選項。它指示編譯器在某些函數的堆棧幀(stack-frames) 中插入特定數據,以幫助消除針對堆棧的內存溢出問題隱患。切記,使用該選項並不能替你清除代碼中的內存溢出漏洞,也不可能消滅任何 bug 。它只是亡羊補牢,讓某些內存溢出問題隱患無法演變成真正的內存溢出問題;也就是說,它能防止攻擊者在發生內存溢出時向進程中插入和運行惡意代碼。無論如何,這也算是小小的安全保障吧。請注意,在新版的本地 Win32 C++ 中使用 Win32 應用程序向導創建新項目時,默認設置已經打開了此選項。同樣,Windows .NET Server 環境也默認打開了此選項。關於 /GS 選項的更多信息,請參考 Brandon Bray 的《Compiler Security Checks In Depth》一書。
所謂定點數溢出是指定點數的運算結果的絕對值大於計算機能表示的最大數的絕對值。浮點數的溢出又可分為「上溢出」和「下溢出」兩種,「上溢出」與整數、定點數的含義相同,「下溢出」是指浮點數的運算結果的絕對值小於機器所能表示的最小數絕對值,此時將該運算結果處理成機器零。若發現溢出(上溢出),運算器將產生溢出標志或發出中斷請求,當溢出中斷未被屏蔽時,溢出中斷信號的出現可中止程序的執行而轉入溢出中斷處理程序。<BR><BR>
例如:有兩個數0.1001111和0.1101011相加,其結果應為1.0111010。由於定點數計算機只能表示小於1的數,如果字長只有8位,那麼小數點前面的1,會因沒有觸發器存放而丟失。這樣,上述兩個數在計算機中相加,其結果變為0.0111010。又如,有兩個數0.0001001和0.00001111相乘,其結果應為0.00000000111111,若字長只有8位,則結果顯示為0.0000000,後面的1個0和6個1全部丟失,顯然這個結果有誤差。計算機的任何運算都不允許溢出,除非專門利用溢出做判斷,而不使用所得的結果。所以,當發生和不允許出現的溢出時,就要停機或轉入檢查程序,以找出產生溢出的原因,做出相應的處理。
I. 緩沖區溢出的基本原理是什麼
緩沖區溢出(buffer overflow),針對程序設計缺陷,向程序輸入緩沖區寫入使之溢出的內容(通常是超過緩沖區能保存的最大數據量的數據),從而破壞程序運行、趁著中斷之際並獲取程序乃至系統的控制權。
原理:通過往程序的緩沖區寫超出其長度的內容,造成緩沖區的溢出,從而破壞程序的堆棧,造成程序崩潰或使程序轉而執行其它指令,以達到攻擊的目的。造成緩沖區溢出的原因是程序中沒有仔細檢查用戶輸入的參數。
(9)內存緩存如何控制溢出擴展閱讀
緩沖區溢出攻擊的目的在於擾亂具有某些特權運行的程序的功能,這樣可以使得攻擊者取得程序的控制權,如果該程序具有足夠的許可權,那麼整個主機就被控制了。攻擊者攻擊root程序,然後執行類似「exec(sh)」的執行代碼來獲得root許可權的shell。
為了達到這個目的,攻擊者必須達到如下的兩個目標:在程序的地址空間里安排適當的代碼。通過適當的初始化寄存器和內存,讓程序跳轉到入侵者安排的地址空間執行。
J. 緩沖區溢出怎麼辦,只要說怎麼解決,不想重做系統
先清理c盤,然後設置緩存,可以設置到D盤,也可以C盤,看你C盤空間足夠就行。因為你緩沖區溢出,你肯定是執行很大的運用程序,設置數值時最好設大一點,具體設置方法是1.右擊我的電腦,選擇屬性,再點擊高級系統設置。2.選擇「高級」,點擊性能一欄的「設置」3.又單擊高級,選擇虛擬內存下的設置。如果你是2G內存,可以設置成:最小值1024最大值3068