Мне нужно написать (изменить) исполняемый файл, а затем выполнить его с помощью системного вызова Linux. Я попытался создать (открыть) файл, записать в него запись, закрыть его и затем выполнить. Проблема в том, что при попытке выполнения счетчик записей в файл по-прежнему равен единице, даже если файл был закрыт. Вот фрагмент нового системного вызова, запущенного в режиме ядра, который должен достичь этой цели.
Код: Выделить всё
destfile = filp_open(destfilename, O_WRONLY | O_TRUNC | O_CREAT, 0755);
if (IS_ERR(destfile)) {
pr_err("Failed to open file: %s\n", destfilename);
filp_close(sourcefile, NULL);
return PTR_ERR(destfile);
}
// write data to the file
filp_close(destfile, NULL);
kernel_execve(destfilename, {destfilename, NULL}, {NULL});
Проблема заключается в том, что при попытке kernel_execve файл writecount является одним из них, и это предотвращает выполняемый файл. Между Close и Exec выполняется файл, однако последующие вызовы не позволят изменять файл.
Подробнее здесь:
https://stackoverflow.com/questions/797 ... nux-kernel