我正在閱讀關於Linux上的VM處理。顯然要執行一個系統調用,x86上有一個0xFFFFF000的頁面。稱爲vsyscall頁面。過去,調用系統調用的策略是使用int 0x80。這個vsyscall頁面策略仍然使用int 0x80,還是使用不同的調用策略(例如,系統調用操作碼?)。抵押問題:是int 0x80方法過時了嗎?通過vsyscall訪問Linux系統調用策略頁面
1
A
回答
1
如果你在一個現代的Linux二進制運行ldd
,你會看到,它的鏈接或叫linux-vdso.1
(基於AMD64)一個動態庫linux-gate.so.1
(x86上的),它位於該vsyscall頁。這是由內核提供的共享庫,映射到每個進程的地址空間,其中包含C函數,封裝瞭如何執行系統調用的細節。
此封裝的原因是執行系統調用的「首選」方式可能因機器而異。中斷0x80方法應該始終在x86上工作,但最新的處理器支持更有效的sysenter
(Intel)或syscall
(AMD)指令。您希望程序在可用時使用這些程序,但您也希望在Intel和AMD(以及其他)處理器上運行相同的編譯二進制文件,因此它不應包含特定於供應商的操作碼。該庫將這些處理器特定的決定隱藏在一致的接口後面。請參閱this article。
相關問題
- 1. Linux:通過ptrace()執行系統調用()
- 2. Rails 3:系統通知的策略
- 3. 訪問虛擬linux系統
- 4. Vim:通過ssh訪問系統剪貼板 - Linux到OS X
- 5. Linux系統調用
- 6. 使用teamviewer從Windows訪問Linux系統?
- 7. JPA - 訪問策略
- 8. 在分叉後執行系統調用中的調度策略
- 9. sql 2005 - 限制通過存儲過程訪問的策略
- 10. 在Linux系統()調用的問題
- 11. 通過PowerShell/cmd爲Linux應用程序調用Windows子系統
- 12. 網頁只能通過特定的計算機系統訪問
- 13. 移植訪問(2)Linux系統調用boost :: filesystem
- 14. linux訪問系統調用不按預期方式工作
- 15. 在系統調用中訪問Linux內核的SuperBlock對象
- 16. CPU調度策略(通過多線程)
- 17. linux系統調用getpeername C++
- 18. linux系統調用執行
- 19. 開放系統調用 - Linux
- 20. Linux系統調用誰
- 21. nasm系統調用Linux
- 22. Linux阻止系統調用
- 23. Linux系統調用getifaddr C++
- 24. 宏+ Linux系統調用(NASM)
- 25. 預訂Linux系統上的大頁面
- 26. 通過系統調用在Linux上監控內存
- 27. 在linux下,怎麼做系統調用通過GNU ARM彙編
- 28. 忽略系統調用
- 29. Facebook的頁面統計 - 通過Opengraph訪問?
- 30. 頁面訪問統計
查看此答案:http://stackoverflow.com/a/19942352/795910 –
@OtataCampana:謝謝。非常酷的東西。 –