![](/img/trans.png)
[英]What if the counter exceeds the memory allocated by malloc or calloc
[英]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
不太可能是頁面對齊的,因此您最終會在相鄰的 memory 上設置權限,也可能會破壞事情。free
之前不恢復舊權限,您可能會破壞malloc
的內部結構。 malloc()
通常會返回具有讀寫權限的 memory。 某些架構(例如:較舊的 x86)可能不允許以直接方式禁用執行權限,但這只是平台的缺陷。
如果你想從你分配的 memory 執行代碼,你必須明確地給予執行權限,並且可能你必須刪除寫權限,因為在同一個 memory 上同時擁有寫和執行權限在某些系統上被認為是潛在危險的(通常稱為 W^X)。
還有幾個其他線程用於執行程序員分配的 memory 中的代碼:
在分配 memory 之后,您可能需要調用mprotect
自己設置PROT_EXEC
標志。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.