Как я могу изменить исполняемый файл в sys_execve ()Linux

Ответить
Anonymous
 Как я могу изменить исполняемый файл в sys_execve ()

Сообщение Anonymous »

Я пытаюсь заменить "/usr/bin/echo" от "/usr/bin/ls" в sys_execve (), измененный код является следующим.

Код: Выделить всё

SYSCALL_DEFINE3(execve,
const char __user *, filename,
const char __user *const __user *, argv,
const char __user *const __user *, envp)
{
const char *kernel_filename;
kernel_filename = strndup_user(filename, PATH_MAX);
if (IS_ERR(kernel_filename)) {
return PTR_ERR(kernel_filename);
}

if (strcmp(kernel_filename, "/usr/bin/echo") == 0) {
printk(KERN_INFO "Modifying from %s to /usr/bin/ls\n", kernel_filename);
const char * const* k_argv;
const char * const* k_envp;
int argc = 0;
int envc = 0;
copy_exec_args(argv, envp, &k_argv, &k_envp, &argc, &envc);
int res  = kernel_execve("/usr/bin/ls", k_argv, k_envp);
kfree(kernel_filename);
if (k_argv) {
for (int i = 0; i < argc; i++)
kfree(k_argv[i]);
kfree(k_argv);
}
if (k_envp) {
for (int i = 0; i < envc; i++)
kfree(k_envp[i]);
kfree(k_envp);
}
return res;
}
kfree(kernel_filename);

return do_execve(getname(filename), argv, envp);
}
< /code>
запустить qemu: < /p>
qemu-system-x86_64 \
-kernel ./linux/arch/x86_64/boot/bzImage \
-initrd ./ram.img \
-drive file=vm-disk.qcow2,format=qcow2 \
-m 2G \
-append "root=/dev/sda rw console=ttyS0" \
-nographic
test/usr/bin/echo Команда:

Код: Выделить всё

(initramfs) /usr/bin/echo hello
[  195.914196] Modifying from /usr/bin/echo to /usr/bin/ls
[  195.915116] kernel_execve: /usr/bin/ls
[  195.915931] /usr/bin/ls
[  195.916546] /usr/bin/ls
hello
Но когда я строю ядро ​​и проверяю его в qemu, он все еще работает "/usr/bin/echo" вместо "/usr/bin/ls". кар/> почему замена не сработала, и как я могу ее исправить?>

Подробнее здесь: https://stackoverflow.com/questions/795 ... sys-execve
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»