2010-08-31 36 views

回答

1

ASLR是一種技術,旨在通過將細分區段稍微移動來使各種類型的緩衝區溢出更難以利用。堆棧可以移動幾個字節(或頁面),程序的各個部分(甚至是你的代碼使用的庫)可以加載到不同的地址等。

緩衝區溢出通常通過欺騙CPU運行代碼在某個地址(通常在堆棧上)。 ASLR通過使地址難以預測而使複雜化,因爲它可以在程序每次運行時改變。通常情況下,程序不會運行任意代碼,而只會崩潰。這顯然是一件壞事,但並不像一些隨意的小丑可以控制你的服務器那樣糟糕。

ASLR的一個非常簡單的粗略形式實際上可以在沒有OS的任何幫助的情況下實現,只需從堆棧指針中減去一些小數量即可。 (在高級語言中做這件事有點棘手,但是在C中稍微簡單一些 - 而在ASM中則顯得微不足道)。但是,這隻能防止使用堆棧的溢出。操作系統更有幫助;它可以改變各種東西,如果感覺像。儘管如此,它取決於你的操作系統。