11
A
回答
15
請參閱mprotect()。一旦用代碼填充了一個(n-)頁面大小的內存區域(用mmap()分配),請更改其權限以禁止寫入並允許執行。
6
除了正確使用mprotect
來提供第一次寫入然後執行權限之外,在某些操作系統/硬件操作中,您可能需要刷新I-cache。在這個時刻(2010年中),所有最新的x86處理器都有獨立的指令和數據的1級緩存,有人必須確保,如果您向內存寫入新指令(它將更新D-cache)然後嘗試從I緩存中執行陳舊的位。究竟如何從用戶空間刷新I-cache將取決於你的硬件和操作系統。我的建議是閱讀英特爾有關其「自我修改代碼」的IA-32多處理器文檔。這應該足以讓你通過。
+0
x86不需要這個; x86 ISA規則要求I-cache與數據高速緩存一致,並且在「看到」新寫入的字節之前至多需要一個「jmp」。但好處是,其他架構沒有連貫的I-cache。 – 2017-11-27 12:03:17
相關問題
- 1. Linux上的RAM分析
- 2. 在Centos(Linux)上執行C#代碼?
- 3. 如何在Linux上使用C/C++執行DNS查找?
- 4. 使用可執行文件在Linux上的PHP的MySQL備份
- 5. 如何在Linux上使用C執行切換用戶
- 6. 在linux上創建可執行的C語言補充程序
- 7. 使用PHP在Linux服務器上運行C++可執行文件
- 8. 在linux上使用C++進行arping
- 9. 如何使用Qt在Windows和Linux上執行Ctrl + C
- 10. 使用C++在linux上進行vectorwise ODBC配置
- 11. 在Linux上遠程執行可執行文件?
- 12. Windows Server 2003上的IIS 6 RAM分配
- 13. 在可執行文件上使用dlopen()
- 14. 解析/執行C++中的C#代碼(在Linux上)?
- 15. C在Linux上的藍牙配對
- 16. 在計算機上的Ram配置
- 17. 如何在運行Linux的PowerPC CPU上預留RAM?
- 18. 在對象上使用.map()不會在分片上執行
- 19. 如何在Linux內核模塊中分配可執行頁面?
- 20. 在Linux機器上執行C#win表單應用程序
- 21. 在C上的通配符條目在Linux上的文件名
- 22. Gradle distZip任務在Windows上執行,但在Linux上運行
- 23. 如何使用Objective C在OSX上執行分佈式對象?
- 24. 運行在C#上用Jenkins在Linux上編寫的NUnit測試
- 25. linux上的pthread執行
- 26. 是否可以在Linux上爲Mac創建可執行文件?
- 27. 從哪裏可以獲得可執行文件在linux上
- 28. 我可以在Linux上動態加載可執行文件嗎?
- 29. 在linux上配置php使用梨
- 30. 在x86上執行x86 Android AVD在Linux上的工作?
另外,請閱讀:http://people.redhat.com/drepper/selinux-mem.html – 2010-06-26 23:02:31
@Ignacio:鏈接已關閉,存檔鏈接:http://web.archive.org/web/20090203055327/ http://people.redhat.com/drepper/selinux-mem.html – ninjalj 2011-06-03 20:59:23