ฉันรู้ว่าส่วนต่อประสานการโทรของระบบมีการใช้งานในระดับต่ำและด้วยเหตุนี้ขึ้นอยู่กับสถาปัตยกรรม / แพลตฟอร์มไม่ใช่รหัส "ทั่วไป"
แต่ฉันไม่สามารถเห็นได้อย่างชัดเจนว่าทำไมการเรียกระบบในเคอร์เนล x86 แบบ 32 บิตมีหมายเลขที่ไม่เหมือนกันในสถาปัตยกรรมที่คล้ายกัน Linux 64-bit x86_64 แรงจูงใจ / เหตุผลเบื้องหลังการตัดสินใจนี้คืออะไร?
การเดาครั้งแรกของฉันคือเหตุผลเบื้องหลังที่ทำให้แอปพลิเคชันแบบ 32 บิตสามารถทำงานได้บนระบบ x86_64 ดังนั้นการชดเชยออฟเซตที่เหมาะสมกับหมายเลขการโทรของระบบระบบจะรู้ว่าพื้นที่ผู้ใช้เป็น 32 บิตหรือ 64 บิต ตามลำดับ อย่างไรก็ตามนี่ไม่ใช่กรณี อย่างน้อยก็สำหรับฉันที่ read () เป็นสายระบบ 0 ใน x86_64 ไม่สามารถปรับให้เข้ากับความคิดนี้
อีกข้อหนึ่งคือการเปลี่ยนหมายเลขโทรศัพท์ของระบบอาจมีพื้นหลังด้านความปลอดภัย / แข็งตัวซึ่งเป็นสิ่งที่ฉันไม่สามารถยืนยันตัวเองได้
ด้วยความไม่รู้ถึงความท้าทายของการใช้งานส่วนของโค้ดที่ขึ้นอยู่กับสถาปัตยกรรมฉันยังสงสัยว่าการเปลี่ยนหมายเลขการโทรของระบบเมื่อดูเหมือนว่าไม่จำเป็น (เพราะแม้แต่การลงทะเบียนแบบ 16 บิตจะเก็บไว้มากกว่านั้นในปัจจุบัน ~ 346 การเรียกใช้) จะช่วยให้บรรลุผลทุกอย่างนอกเหนือจากความเข้ากันได้ของการแบ่ง (แม้ว่าการใช้การเรียกของระบบผ่านทางไลบรารี libc จะช่วยลดความมัน)