Quiero llamar a un syscall de Linux (o al menos el contenedor libc) directamente desde un lenguaje de script. No me importa qué lenguaje de secuencias de comandos: es importante que no se compile (la razón básicamente tiene que ver con no querer un compilador en la ruta de dependencia, pero eso no es ni aquí ni allá). ¿Hay algún lenguaje de script (shell, Python, Ruby, etc.) que permita esto?
En particular, es el syscall getrandom.
/dev/urandom
. Ciertamente puedes hacerlo desde un script de shell./dev
aún no esté disponible. ¡Pero entonces difícil de imaginar sería Perl!/dev/random
hasta que se desbloquea y luego leer/dev/urandom
?Respuestas:
Perl permite esto con su
syscall
función:La documentación también da un ejemplo de llamar a write (2):
Sin embargo, no puedo decir que alguna vez haya usado esta función. Bueno, antes de ahora para confirmar el ejemplo sí funciona.
Esto parece funcionar con
getrandom
:Y si no tiene getrandom en su syscall.ph, entonces podría usar el número en su lugar. Es 318 en mi cuadro de prueba de Debian (amd64). Tenga en cuenta que los números de syscall de Linux son específicos de la arquitectura.
fuente
En Python puede usar el
ctypes
módulo para acceder a funciones arbitrarias en bibliotecas dinámicas, inclusosyscall()
desde libc:Si su libc incluye la
getrandom()
función de contenedor, también puede llamarla:fuente
getrandom
Hay alguna posibilidad de que pueda agregar un ejemplo de llamada a la función libc directamente en lugar de la llamada al sistemagetrandom
? ¿Es eso posible?SYS_getrandom
valor en tiempo de ejecución (para que lo hagas bien en la plataforma actual)? Por ejemplo, analizando/usr/include
archivos de encabezado?Ruby tiene una
syscall(num [, args...]) → integer
función.Por ejemplo:
Con
getrandom()
:fuente