Я хочу вызвать системный вызов Linux (или, по крайней мере, оболочку libc) напрямую из языка сценариев. Мне все равно, какой язык сценариев - просто важно, чтобы он не компилировался (причина в основном связана с нежеланием компилятора в пути зависимости, но это ни здесь, ни там). Существуют ли языки сценариев (shell, Python, Ruby и т. Д.), Которые позволяют это?
В частности, это системный вызов getrandom.
/dev/urandom
. Конечно, вы можете сделать это из сценария оболочки./dev
еще не доступен. Но тогда трудно представить, что Perl будет!/dev/random
пока он не разблокируется, затем читать с/dev/urandom
?Ответы:
Perl позволяет это с помощью своей
syscall
функции:В документации также приведен пример вызова write (2):
Не могу сказать, что когда- либо использовал эту функцию. Ну, прежде чем сейчас подтвердить пример действительно работает.
Это похоже на работу с
getrandom
:И если у вас нет getrandom в вашем syscall.ph, то вы можете использовать номер вместо этого. Это 318 на моей коробке тестирования Debian (amd64). Помните, что номера системных вызовов Linux зависят от архитектуры.
источник
В Python вы можете использовать
ctypes
модуль для доступа к произвольным функциям в динамических библиотеках, в том числеsyscall()
из libc:Если в вашем libc есть
getrandom()
функция-обертка, вы также можете вызвать ее:источник
getrandom
функции libc напрямую, а не системный вызовgetrandom
? Это возможно?SYS_getrandom
значения во время выполнения (чтобы вы поняли это правильно для текущей платформы)? Например, путем разбора/usr/include
заголовочных файлов?Руби имеет
syscall(num [, args...]) → integer
функцию.Например:
С
getrandom()
:источник