
AdeusN
(usa Linux Mint)
Enviado em 18/03/2013 - 11:40h
Olá!
Preciso alterar a system call write() do Linux para que o conteúdo a ser gravado em disco seja modificado. Pelo que pesquisei a implementação da system call fica no arquivo linux/fs/read_write.c (vale lembrar que utilizo Linux Mint 12 - Kernel 3.0.30):
419 SYSCALL_DEFINE3(write, unsigned int, fd, const char __user *, buf,
420 size_t, count)
421 {
422 struct file *file;
423 ssize_t ret = -EBADF;
424 int fput_needed;
425
426 file = fget_light(fd, &fput_needed);
427 if (file) {
428 loff_t pos = file_pos_read(file);
429 ret = vfs_write(file, buf, count, &pos);
430 file_pos_write(file, pos);
431 fput_light(file, fput_needed);
432 }
433
434 return ret;
435 }
Alguém poderia me dar uma indicação de como eu faço para alterar a variável "buf", uma vez que ela é definida como uma constante. Eu pensei em copiar ela utilizando a função strcpy() para depois poder alterar os dados, porém não funcionou. Quando recompilei o kernel e reiniciei a máquina deu kernel panic.
Obrigado!