Quero chamar um syscall do Linux (ou pelo menos o wrapper libc) diretamente de uma linguagem de script. Eu não me importo com a linguagem de script - é importante que não seja compilada (o motivo basicamente tem a ver com não querer um compilador no caminho da dependência, mas isso não é aqui nem ali). Existem linguagens de script (shell, Python, Ruby, etc) que permitem isso?
Em particular, é o syscall getrandom .
/dev/urandom
. Certamente você pode fazer isso a partir de um script de shell./dev
é claro, ainda não esteja disponível. Mas então difícil imaginar Perl seria!/dev/random
até que ele seja desbloqueado e depois leia/dev/urandom
?Respostas:
O Perl permite isso com sua
syscall
função:A documentação também fornece um exemplo de chamada write (2):
Não posso dizer que já usei esse recurso. Bem, antes de confirmar agora o exemplo realmente funciona.
Parece funcionar com
getrandom
:E se você não tiver o getrandom no seu syscall.ph, poderá usar o número. É 318 na minha caixa de teste Debian (amd64). Cuidado que os números de syscall do Linux são específicos da arquitetura.
fonte
No Python, você pode usar o
ctypes
módulo para acessar funções arbitrárias em bibliotecas dinâmicas, incluindo asyscall()
partir da libc:Se sua libc inclui a
getrandom()
função wrapper, você também pode chamá-la:fonte
getrandom
função libc diretamente, em vez de syscallgetrandom
? Isso é possível?SYS_getrandom
valor em tempo de execução (para que você acerte na plataforma atual)? Por exemplo, analisando os/usr/include
arquivos de cabeçalho?Ruby tem uma
syscall(num [, args...]) → integer
função.Por exemplo:
Com
getrandom()
:fonte