簡體   English   中英

malloc分配的memory的保護標志是什么?

[英]What's the protection flags of memory allocated by malloc?

根據this thread ,malloc分配的malloc至少有PROT_READ | PROT_EXEC PROT_READ | PROT_EXEC ,否則無法執行包含的 function。

man malloc沒有提到任何關於保護的內容,因此這個問題。

malloc不是為代碼分配 memory 的正確工具。 您應該使用mmap ,並且根據系統上的偏執安全策略,您可能還需要使用mprotect來更改權限。

malloc不是正確工具的原因包括:

  • 權限僅設置頁面粒度,但 malloc 獲得的malloc不太可能是頁面對齊的,因此您最終會在相鄰的 memory 上設置權限,也可能會破壞事情。
  • 如果您在調用free之前不恢復舊權限,您可能會破壞malloc的內部結構。

malloc()通常會返回具有讀寫權限的 memory。 某些架構(例如:較舊的 x86)可能不允許以直接方式禁用執行權限,但這只是平台的缺陷。

如果你想從你分配的 memory 執行代碼,你必須明確地給予執行權限,並且可能你必須刪除寫權限,因為在同一個 memory 上同時擁有寫和執行權限在某些系統上被認為是潛在危險的(通常稱為 W^X)。

還有幾個其他線程用於執行程序員分配的 memory 中的代碼:

在 linux 上的 c 中分配可執行 ram
是否可以從標准 C 中的堆棧執行代碼?

在分配 memory 之后,您可能需要調用mprotect自己設置PROT_EXEC標志。

$ 人 mprotect

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM