syscall - sys_call_table en Linux kernel 2.6.18
system call write linux (2)
Estoy tratando de configurar la llamada de salida del sistema a una variable
extern void *sys_call_table[];
real_sys_exit = sys_call_table[__NR_exit]
Sin embargo, cuando trato de hacer, la consola me da el error
error: ‘__NR_exit’ undeclared (first use in this function)
Cualquier consejo sería apreciado :) Gracias
Si no ha incluido el archivo syscall.h, debe hacerlo antes de la referencia a __NR_exit. Por ejemplo,
#include <syscall.h>
#include <stdio.h>
int main()
{
printf("%d/n", __NR_exit);
return 0;
}
que devuelve:
$ cc t.c
$ ./a.out
60
Algunas otras observaciones:
Si ya ha incluido el archivo, las razones habituales por las que
__NR_exit
no se definirán son que la definición se estaba ignorando debido a la compilación condicional (#ifdef
o#ifndef
en algún lugar) o porque se está eliminando en otro lugar mediante un#undef
.Si está escribiendo el código para el espacio del kernel, tiene un conjunto de encabezados completamente diferentes para usar. LXR ( http://lxr.linux.no/linux ) archivo navegable y buscable de la fuente del kernel es un recurso útil.
Como está en kernel 2.6.x, ya no se exporta sys_call_table. Si quiere evitar el error de compilación intente esto incluir
#include<linux/unistd.h>
sin embargo, no funcionará. Así que el trabajo para "jugar" con sys_call_table es encontrar la dirección de sys_call_table en SystemXXXX.map (ubicado en / boot) con este comando:
grep sys_call System.map-2.6.X -i
esto dará las direcciones, entonces este código debería permitirle modificar la tabla:
unsigned long *sys_call_table;
sys_call_table = (unsigned long *) simple_strtoul("0xc0318500",NULL,16);
original_mkdir = sys_call_table[__NR_mkdir];
sys_call_table[__NR_mkdir] = mkdir_modificado;
Espero que funcione para ti, acabo de probarlo en el kernel 2.6.24, así que debería funcionar para 2.6.18
también verifique aquí, es un muy buen http://commons.oreilly.com/wiki/index.php/Network_Security_Tools/Modifying_and_Hacking_Security_Tools/Fun_with_Linux_Kernel_Modules