Puisque vous êtes dans le noyau 2.6.x, sys_call_table n'est plus exporté. Si vous voulez éviter l'erreur de compilation essayez ceci inclut
#include<linux/unistd.h>
Cependant, il ne fonctionnera pas. Ainsi, le travail autour de « jouer » avec le sys_call_table est de trouver l'adresse de sys_call_table à SystemXXXX.map (situé à/boot) avec cette commande:
grep sys_call System.map-2.6.X -i
cela donnera les addres, alors ce code devrait permettre vous de modifier la table:
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;
espérons que cela fonctionne pour vous, je viens de tester sous le noyau 2.6.24, doivent donc travailler pour 2.6.18
également vérifier ici, est un très bon http://commons.oreilly.com/wiki/index.php/Network_Security_Tools/Modifying_and_Hacking_Security_Tools/Fun_with_Linux_Kernel_Modules
... pourquoi utilisez-vous 'strtoul' sur une valeur statique? Pourquoi ne pas simplement utiliser un '0xc0318500' littéral? En outre, cela échouera sur un noyau relocalisable. – bdonlan