從一個沒有被移除的圖片中,有人可以更詳細地闡述Linux的系統調用(如read()和write()等)之間的區別。並使用x86 INT操作碼將它們寫入程序集,並設置指定的寄存器?Linux系統調用和INT 80軟件中斷之間的巨大差異
2
A
回答
6
實際功能read()
是一個名爲「系統調用門」的C庫封裝器。 C庫封裝器主要負責設置失敗的設置errno
,以及用戶空間中使用的結構與低級別系統調用使用的結構之間的映射。
系統調用門實際上是從用戶模式切換到內核模式的。這取決於CPU架構 - 在x86上,您有兩種選擇 - 一種是在使用syscall編號和參數設置寄存器後使用INT 080h
;另一種方法是調用映射到每個可執行文件地址空間的庫提供的符號,並使用相同的寄存器設置。這個庫然後在用戶 - >內核轉換的幾個潛在選項之間進行選擇,包括SYSENTER
,SYSCALL
或回退到INT 080h
。其他架構使用不同的方法。在任何情況下,CPU都會移入內核空間,系統調用編號用於在大表中查找適當的處理程序。
0
中斷不是調用系統調用的唯一方法,您可以使用特殊指令(如sysenter,syscall或簡單跳轉到受保護模式下的特定地址)。
相關問題
- 1. x86_64 Linux函數和系統調用之間的ABI差異
- 2. ipa大小和項目大小之間的巨大差異
- 3. 軟件中斷系統調用
- 4. int * i和int **之間的差異
- 5. 傳統軟件包之間的差異com.day.cq.workflow和com.adobe.granite.workflow
- 6. imageview和textview之間的巨大差距
- 7. 發佈/調試版本之間巨大的幀率差異
- 8. JNDI查找時間巨大差異
- 9. OpenCV StereoSGBM和gpu之間的巨大差異:: StereoBM_GPU
- 10. 收入和產品收入之間的巨大差異
- 11. WebSphere Liberty 8.5.5.5和8.5.5.6+之間的巨大啓動差異
- 12. Firefox和Chrome渲染之間的巨大差異
- 13. Umbraco NuGet軟件包之間的差異
- 14. 巨大的性差異
- 15. 真實用戶和系統用戶帳戶之間的差異
- 16. 巨大差異大小
- 17. 開始日期和系統時間之間的差異
- 18. MS Windows和Linux之間的Calloc差異?
- 19. Windows和Linux之間的WxPython差異
- 20. 連接之間巨大的性能差異
- 21. 在Linux中調度中斷和系統調用
- 22. Linux系統調用的Java斷點
- 23. 異步調用和異步io調用之間的差異.net
- 24. int,int *和int []與std :: unique_ptr之間的差異
- 25. Gradle v1.x vs v2.x之間巨大的差異
- 26. dotMemory分析iisexpress與WebDev之間巨大的內存差異
- 27. XCode的「登錄」和「系統」證書之間的差異
- 28. 非常類似的查詢之間巨大的性能差異
- 29. 兩個類似SQL查詢之間的巨大性能差異
詢問「系統調用」和「在彙編中編寫系統調用」之間的區別就像是問「書」和「寫作書」之間的區別。一個是實體,另一個是過程。 –