2010-07-31 19 views

Répondre

3

Dans certaines versions de noyau, il est possible d'ajouter ou de modifier un systemcall en modifiant la table sys_call_table. Mais comme cette table n'est pas destinée à être modifiée au moment de l'exécution, elle n'a aucune protection. Changer la table entraînera des conditions de course. Même sans les conditions de course, il existe des problèmes liés à l'enlèvement des modules pendant qu'ils sont utilisés ou empilés. En raison des problèmes de modification des modules, le symbole n'est plus exporté dans les nouveaux noyaux. En d'autres termes, si vous obtenez "unresolved symbol sys_call_table" en essayant de charger un module, cela signifie qu'il y a un bug dans le module, et le noyau n'accepte plus de tels modules buggés.

1

Cela semble être une très mauvaise idée, peu importe si vous le pouvez. Si votre nouvel appel système fonctionnera sur des fichiers/périphériques, vous pourriez peut-être en faire un ioctl ou quelque chose de similaire plutôt que de faire son propre syscall?