Linux | gcc編譯中開啓linux程序保護機制的參數

總結

NX:-z execstack / -z noexecstack (關閉 / 開啓)
Canary:-fno-stack-protector /-fstack-protector / -fstack-protector-all (關閉 / 開啓 / 全開啓)
PIE:-no-pie / -pie (關閉 / 開啓)
RELRO:-z norelro / -z lazy / -z now (關閉 / 部分開啓 / 完全開啓)

NX

gcc -o test test.c // 默認情況下,開啓NX保護
gcc -z execstack -o test test.c // 禁用NX保護
gcc -z noexecstack -o test test.c // 開啓NX保護

Canary

gcc -o test test.c // 默認情況下,不開啓Canary保護
gcc -fno-stack-protector -o test test.c //禁用棧保護
gcc -fstack-protector -o test test.c //啓用堆棧保護,不過只爲局部變量中含有 char 數組的函數插入保護代碼
gcc -fstack-protector-all -o test test.c //啓用堆棧保護,爲所有函數插入保護代碼

PIE

gcc -o test test.c // 默認情況下,不開啓PIE
gcc -fpie -pie -o test test.c // 開啓PIE,此時強度爲1
gcc -fPIE -pie -o test test.c // 開啓PIE,此時爲最高強度2
gcc -fpic -o test test.c // 開啓PIC,此時強度爲1,不會開啓PIE
gcc -fPIC -o test test.c // 開啓PIC,此時爲最高強度2,不會開啓PIE

0 - 表示關閉進程地址空間隨機化。
1 - 表示將mmap的基址,stack和vdso頁面隨機化。
2 - 表示在1的基礎上增加棧(heap)的隨機化。

RELRO

gcc -o test test.c // 默認情況下,是Partial RELRO
gcc -z norelro -o test test.c // 關閉,即No RELRO
gcc -z lazy -o test test.c // 部分開啓,即Partial RELRO
gcc -z now -o test test.c // 全部開啓,即Full RELRO

Fortify

gcc -o test test.c // 默認情況下,不會開這個檢查
gcc -D_FORTIFY_SOURCE=1 -o test test.c // 較弱的檢查
gcc -D_FORTIFY_SOURCE=2 -o test test.c // 較強的檢查

文件保護機制詳解
linux程序保護機制&gcc編譯選項

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章