Chcę wywołać wywołanie systemowe Linux (lub przynajmniej opakowanie libc) bezpośrednio z języka skryptowego. Nie obchodzi mnie, jaki język skryptowy - ważne jest, aby nie był on kompilowany (powodem jest w zasadzie to, że nie chcę kompilatora na ścieżce zależności, ale nie ma go tu ani tam). Czy są na to języki skryptowe (shell, Python, Ruby itp.)?
W szczególności jest to wywołanie systemowe getrandom.
/dev/urandom
. Z pewnością możesz to zrobić ze skryptu powłoki./dev
nie jest jeszcze dostępne. Ale trudno sobie wyobrazić, że Perl byłby!/dev/random
aż się odblokuje, a potem czytać/dev/urandom
?Odpowiedzi:
Perl pozwala na to ze swoją
syscall
funkcją:Dokumentacja podaje również przykład wywołania write (2):
Nie mogę powiedzieć, że kiedykolwiek korzystałem z tej funkcji. Cóż, przed chwilą, aby potwierdzić, że przykład rzeczywiście działa.
Wygląda na to, że działa z
getrandom
:A jeśli nie masz getrandom w syscall.ph, możesz zamiast tego użyć numeru. Jest 318 na moim pudełku testowym Debiana (amd64). Uważaj, że numery systemowe Linuksa są specyficzne dla architektury.
źródło
W Pythonie możesz używać
ctypes
modułu do uzyskiwania dostępu do dowolnych funkcji w bibliotekach dynamicznych, w tymsyscall()
z libc:Jeśli twoja biblioteka libc zawiera funkcję
getrandom()
otoki, możesz ją również wywołać:źródło
getrandom
funkcji libc bezpośrednio zamiast wywołania systemowegogetrandom
? Czy to jest możliwe?SYS_getrandom
wartości w czasie wykonywania (aby uzyskać odpowiedni wynik dla bieżącej platformy)? Np. Parsując/usr/include
pliki nagłówkowe?Ruby ma
syscall(num [, args...]) → integer
funkcję.Na przykład:
Z
getrandom()
:źródło