[英]About accessing userspace memory from kernel
我正在XNU內核上進行kext開發,有一個名為copyin及其朋友的KPI函數,類似於Linux內核上的copy_from_user
因此,我大多數時候都使用copyin,它在內核空間而不是相對易變的用戶空間處理數據更為安全,但是有時我需要從用戶空間處理大量內存(例如2MB),我只需要讀取,是直接訪問用戶空間內存的借口? (這會導致意外的問題嗎?)
用戶空間中的數據具有條目,因此我至少每次都需要讀取,此外,我也不需要從用戶空間過程中對該內存進行任何寫操作,我列出了三種我可以考慮的方法,希望有人可以給出我的建議,我真的很感激!
第一種方法,如果我不寫,那可以映射到相同的物理圖,所以不需要浪費的內存嗎? 哪種方式效率更高?
如果您有用戶空間地址,則可以將其重新映射到內核-將IOMemoryDescriptor::withAddressRange
與相關任務(流程任務)一起使用,並通過IOMemoryDescriptor::createMappingInTask
將其映射到內核。
確保權限正確。
只是一個友好的提示- stac
/ clac
指令由上下文切換代碼處理程序重寫,你將必須確保它不被在你復制階段調用。 完成-不太有趣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.