Je veux appeler un syscall Linux (ou au moins le wrapper libc) directement à partir d'un langage de script. Peu m'importe le langage de script - il est juste important qu'il ne soit pas compilé (la raison a essentiellement à voir avec le fait de ne pas vouloir de compilateur dans le chemin de dépendance, mais ce n'est ni ici ni là). Existe-t-il des langages de script (shell, Python, Ruby, etc.) qui permettent cela?
En particulier, c'est le syscall getrandom.
/dev/urandom
. Vous pouvez certainement le faire à partir d'un script shell./dev
ne soit pas encore disponible. Mais alors difficile d'imaginer que Perl le serait!/dev/random
jusqu'à ce qu'il se débloque, puis lire/dev/urandom
?Réponses:
Perl permet cela avec sa
syscall
fonction:La documentation donne également un exemple d'appel de write (2):
Je ne peux pas dire que j'aie jamais utilisé cette fonctionnalité. Eh bien, avant tout à l'heure, pour confirmer l'exemple fonctionne effectivement.
Cela semble fonctionner avec
getrandom
:Et si vous n'avez pas getrandom dans votre syscall.ph, vous pouvez utiliser le numéro à la place. C'est 318 sur ma boîte de test Debian (amd64). Sachez que les numéros d'appel système Linux sont spécifiques à l'architecture.
la source
En Python, vous pouvez utiliser le
ctypes
module pour accéder à des fonctions arbitraires dans des bibliothèques dynamiques, y compris àsyscall()
partir de libc:Si votre libc inclut la
getrandom()
fonction wrapper, vous pouvez également l'appeler:la source
getrandom
Y a-getrandom
t- il une chance que vous puissiez ajouter un exemple d'appel direct de la fonction libc plutôt que de l'appel système ? Est-ce possible?SYS_getrandom
valeur au moment de l'exécution (afin de l'obtenir correctement pour la plate-forme actuelle)? Par exemple, en analysant/usr/include
les fichiers d'en-tête?Ruby a une
syscall(num [, args...]) → integer
fonction.Par exemple:
Avec
getrandom()
:la source