4
Segmentation Fault ทำงานอย่างไรภายใต้ประทุน?
ฉันไม่สามารถหาข้อมูลใด ๆ นอกเหนือไปจาก "MMU ของ CPU ส่งสัญญาณ" และ "เคอร์เนลนำมันไปยังโปรแกรมที่ละเมิดทำให้ยุติ" "Segmentation fault"ฉันคิดว่ามันอาจจะส่งสัญญาณไปยังเปลือกและเปลือกจัดการกับมันโดยยกเลิกกระบวนการที่กระทำผิดและการพิมพ์ ดังนั้นฉันทดสอบสมมติฐานโดยการเขียนเชลล์ที่น้อยที่สุดที่ฉันเรียกว่าcrsh (crap shell) เชลล์นี้ไม่ได้ทำอะไรเลยนอกจากเอาข้อมูลผู้ใช้และป้อนไปยังsystem()วิธีการ #include <stdio.h> #include <stdlib.h> int main(){ char cmdbuf[1000]; while (1){ printf("Crap Shell> "); fgets(cmdbuf, 1000, stdin); system(cmdbuf); } } ดังนั้นฉันจึงวิ่งเปลือกนี้ใน terminal เปลือย (โดยไม่ต้องbashวิ่งภายใต้) จากนั้นฉันก็ดำเนินการเรียกใช้โปรแกรมที่สร้าง segfault หากสมมติฐานของฉันถูกต้องสิ่งนี้อาจจะเป็น) ความผิดพลาดcrshปิด xterm, b) ไม่พิมพ์"Segmentation fault"หรือ c) ทั้งสองอย่าง braden@system ~/code/crsh/ …