在Linux x86_64上,當我使用ptrace停止進程時,所有線程的CPU上下文將被保存,還是隻保存進程的CPU上下文?ptrace會中斷CPU上下文,用戶空間堆棧還是內核堆棧?
進程的用戶空間堆棧或內核堆棧上的上下文是什麼?或者別的地方?或多個副本?
對於其他情況(而不是ptrace),哪裏可以中斷(包括異常和系統調用)CPU上下文保存,內核堆棧,用戶空間堆棧或其他地方?
ptrace是一箇中斷嗎?
更新
看來,ptrace的上下文pt_regs_x86_t,其中保存是由程序員決定。但內核是否也會爲中斷的上下文存儲副本?
這裏異常和int 0x80包含在中斷中,對不對?這裏的系統調用是指sysenter/sysexit,對吧? – WindChaser
是的,有實際的中斷(由外部事件/設備引起),直接由用戶進程調用的陷阱(sysenter,int 0x80等)以及由用戶代碼行爲引起的陷阱或錯誤(頁錯誤,零除,等)。但是所有的結果都會保存在內核中。 –
內核代碼引起的故障如何,會發生什麼? – WindChaser