棧溢位到到底是什麼?(科普篇)

2022-07-28 01:45:12 字數 1215 閱讀 6558

1.對彙編基礎有一定的了解,以及相關的程式語言基礎

2.有一顆好學的心

暫存器和記憶體什麼關係?必須通過暫存器才能和記憶體通訊嗎?
首先,我們要知道的是,暫存器是cpu裡面的東西,而記憶體是在cpu外面的資料匯流排上,在計算機中的所有程式執行都是在記憶體中進行的!

堆疊是記憶體中的乙個資料結構,記憶體是cpu和硬碟之間的通道,暫存器是cpu的儲存器。

即虛擬記憶體位址,程式使用的記憶體位址是虛擬位址,即程式執行在虛擬位址空間中。

並不是所有的 「 程式 」 都是執行在虛擬位址中,cpu在啟動時是執行在實模式,bootloader 以及 核心 在初始化頁表之前並不使用虛擬位址,而是直接使用實體地址的。

實體地址指實際存在的物理記憶體位址,訪問該記憶體中的乙個位址,那就需要對應的物理記憶體。

通過頁表,進行一對一的對映

所謂溢位,就是超出了乙個規定的範圍,廣義上就是超出範圍,導致某些不好的事情發生。

棧又叫堆疊,你可以把它理解為乙個盒子,進棧、出棧遵循先進後出的規則

例(c語言):

在c語言中沒有內建的檢查機制來確保複製到緩衝區的資料不得去大於緩衝區的大小,於是當我們這個資料足夠大的時候,將會溢位緩衝區的範圍之外,導致寫到了不該寫的地方。

也正是這樣,讓我們可以通過此方式去奪取一些敏感的許可權。

int f(int x){int a[10];
越大的專案,溢位將會變得越來越難以避免!

···

cve-2018-17916

cve-2018-14829

cve-2017-11882

cve-2017-9430

cve-2015-8651

cve-2014-3100

cve-2012-0158

cve-2011-0104

cve-2010-3333

cve-2010-0188

cve-2009-0927

cve-2008-2992

cve-2007-5659

···

由年份可以看出棧溢位的尋找無疑將會是困難的,但是一旦收穫乙個 「 溢位 」 漏洞,將會是你針對系統或者說客戶端的最大的利器!

熵(entropy)到底是什麼?科普

有一種概念對物理和化學有極其重要的作用,它幫助我們解釋物理現象的發生而不是通過其他方式。冰為什麼融化?岩漿為什麼冷卻?奶油為什麼會融入在咖啡中?這個概念就是熵。一 通俗概念 通常我們對熵很難理解,熵的解釋是混亂度的度量單位,乙個系統的混亂度越高它的熵就越高,這是一種很恰當的解釋,但不幸我們對這種解釋...

敏捷到底是什麼?

文 ivar jacobson 在支援軟體工程 比如rational統一過程rup 與敏捷陣營 比如scrum或是xp 之間,人們一直存在著衝突。也不難理解,因為這兩種方法間都是在用著彼此並不相容的方式來描述的。其實大可不必,因為他們背後的觀點全然是相輔相成的。關鍵在於該如何用對兩者來說都公平的方式...

我們到底是什麼?

我們到底是什麼?我們是一種生物電流 生物電流有幾種狀態,喜怒哀樂等,可以根據外部環境進行自我切換 該種生物電流附屬在一種器官硬體上面 我們可以從器官硬體上感知一些資訊,產生新的資訊生物電流,新產生的生物電流符合原先的標準 我們可以把資訊電流儲存在器官硬體上,但具體如何儲存等資訊無法被我們感知 我們的...