Saya ingin memanggil syscall Linux (atau setidaknya libc wrapper) langsung dari bahasa scripting. Saya tidak peduli apa bahasa scripting - itu hanya penting bahwa itu tidak dikompilasi (alasannya pada dasarnya ada hubungannya dengan tidak ingin kompiler di jalur ketergantungan, tapi itu tidak penting). Apakah ada bahasa skrip (shell, Python, Ruby, dll) yang memungkinkan ini?
Secara khusus, ini adalah syscall getrandom .
/dev/urandom
. Anda tentu dapat melakukannya dari skrip shell./dev
belum tersedia. Tapi sulit membayangkan Perl akan!/dev/random
sampai terbuka, lalu baca dari/dev/urandom
?Jawaban:
Perl memungkinkan ini dengan
syscall
fungsinya:Dokumentasi juga memberikan contoh penulisan panggilan (2):
Tidak bisa mengatakan saya pernah menggunakan fitur ini. Nah, sebelum sekarang untuk mengkonfirmasi contoh memang berfungsi.
Ini tampaknya bekerja dengan
getrandom
:Dan jika Anda tidak memiliki acak di syscall.ph Anda, maka Anda bisa menggunakan nomor itu sebagai gantinya. Ini 318 pada kotak pengujian Debian saya (amd64). Berhati-hatilah karena nomor syscall Linux spesifik untuk arsitektur.
sumber
Dengan Python Anda dapat menggunakan
ctypes
modul untuk mengakses fungsi-fungsi sewenang-wenang di pustaka dinamis, termasuksyscall()
dari libc:Jika libc Anda menyertakan
getrandom()
fungsi wrapper, Anda dapat menyebutnya juga:sumber
getrandom
fungsi libc secara langsung daripada syscallgetrandom
? Apakah itu mungkin?SYS_getrandom
nilai saat runtime (sehingga Anda melakukannya dengan tepat untuk platform saat ini)? Misalnya, dengan mem-parsing/usr/include
file header?Ruby memiliki
syscall(num [, args...]) → integer
fungsi.Sebagai contoh:
Dengan
getrandom()
:sumber