我試圖通過修改系統調用表來掛鉤Linux 3.x內核上的sys_execve()
函數。問題是如果執行不成功,sys_execve()
只能返回錯誤代碼。使用我正在使用的包裝器功能(請參閱下文),當在有效的可執行文件上調用sys_execve()
時,它可以正常執行並且一切正常。然而,當它被稱爲一個不存在的文件或其他東西會導致一個錯誤條件,調用程序會崩潰與:在Linux 3.x上掛接sys_execve()
segfault at 3b ip 000000000000003b...
使用strace
檢查從鉤sys_execve()
顯示-1或ENOSYS
,而不是返回值正確的錯誤代碼,因爲我已經檢查了我的包裝函數的彙編以及針對sys_execve()
的Linux源代碼,使我感到困惑。任何建議,爲什麼我的包裝不正確地傳遞錯誤代碼?
asmlinkage long new_execve(const char* name, const char const** argv, const char const** envp, struct pt_regs* regs) {
return orig_func(name, argv, envp, regs);
}
這可能是不相關的,但我很感興趣,在Linux> 3替換系統調用。你能否提供一些有關這方面的信息。 – gaurav