簡體   English   中英

在 Linux 中,進程如何調用 mmap() 並為其子進程添加 VMA?

[英]In Linux, how does a process call mmap() and add a VMA for its child?

在gvisor的文檔中解釋了“哨兵通過調用mmap系統調用將虛擬地址到主機文件的有效映射存儲在主機VMA中”,以便容器化的應用程序進程擁有它需要翻譯和訪問的信息它請求的虛擬地址。

這里的哨兵指的是管理程序進程,它正在跟蹤它產生的容器化子應用程序進程。

我的問題是,哨兵究竟是如何為應用程序調用mmap()的? 如果它是從自己的進程調用,這不是修改自己的VMA表而不是應用程序進程的VMA表嗎?

Barmar 在上面的評論中是正確的。 ptrace不提供在被跟蹤對象中進行系統調用的直接機制。 gVisor 實現的核心可以在這里找到。 我們選擇一個跟蹤線程,使用 RIP 在 SYSCALL + 陷阱指令的已知位置設置寄存器,並根據需要設置參數寄存器,然后允許執行通過系統調用繼續並在陷阱處再次停止。

暫無
暫無

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

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