Я пытаюсь подключить функцию sys_execve ()
в ядре Linux 3.x, изменив таблица системных вызовов. Проблема в том, что sys_execve ()
должен возвращать код ошибки только в случае неудачного выполнения. С помощью функции-оболочки, которую я использую (см. Ниже), когда sys_execve ()
вызывается для допустимого исполняемого файла, он выполняется нормально, и все работает нормально. Однако, когда он вызывается для несуществующего файла или чего-то еще, что вызывает состояние ошибки, вызывающая программа аварийно завершает работу с:
segfault at 3b ip 000000000000003b...
Использование strace
для проверки возвращаемого значения из подключенной sys_execve ()
показывает -1 или ENOSYS
вместо правильного кода ошибки, что сбивает меня с толку, поскольку я проверил сборку моей функции-оболочки, а также исходный код Linux для sys_execve ()
. Есть предложения, почему моя оболочка неправильно передает код ошибки?
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);
}