我有一個以orwpwnable.tw命名的 ELF 32 位可執行檔案:
但是在我的 Ubuntu20 和 IDA Pro 中,.bss 段沒有可執行屬性,為什么?

uj5u.com熱心網友回復:
為什么.bss段沒有可執行屬性?
在一個正常的可執行檔案.bss應該不具有執行權限,因此它在Ubuntu 18.04的結果就是奇怪,不是周圍的其他方式。
以下內容均與此處相關:
- 輸出
readelf -Wl orw - 內核版本
- 輸出
cat /proc/cpuinfo - 模擬器詳細資訊(如果您使用的是某種模擬器)。
我懷疑您正在使用模擬器,并且它被設定為模擬前NX 位處理器(該W位也隱含 X位)。
或者,可執行檔案缺少PT_GNU_STACK段,在這種情況下,這個答案可能是正確的——內核默認值已更改為此類二進制檔案。
uj5u.com熱心網友回復:
.bss是用于未初始化的全域變數的段,因此它通常不能執行(不需要)。如果您希望它可執行(因為您正在編譯您希望能夠測驗的機器代碼),您可能需要選擇一個特殊的段或創建兩個重疊的段(一個可執行檔案和其他讀/寫)以允許撰寫代碼,同時您也可以執行它。這可以在您用來鏈接可執行檔案的標準腳本中指定(當然,使用不同的名稱),或者如果還沒有為您完成,您可以指定一個允許創建這些的鏈接描述檔案。閱讀聯結器檔案(完整,抱歉)以了解聯結器如何處理您的處理器架構的這個(和其他)特性。
我不知道您使用的是什么架構,但例如,英特爾處理器在段中具有執行位權限,因為它們具有讀寫權限,這意味著對可執行段的記憶體訪問必須是操作碼獲取訪問和不是資料讀取訪問以加載資料暫存器。如果您想訪問文本段進行資料讀取,那么您還需要添加對文本段的讀取訪問權限,以便能夠看到您正在執行的代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/387260.html
