Ich möchte einen Linux-Systemaufruf (oder zumindest den libc-Wrapper) direkt aus einer Skriptsprache aufrufen. Es ist mir egal, welche Skriptsprache ich verwende - es ist nur wichtig, dass sie nicht kompiliert wird (der Grund dafür ist, dass ich keinen Compiler im Abhängigkeitspfad haben möchte, aber das ist weder hier noch da). Gibt es Skriptsprachen (Shell, Python, Ruby usw.), die dies ermöglichen?
Insbesondere ist es das getrandom syscall .
/dev/urandom
. Das können Sie natürlich aus einem Shell-Skript heraus tun./dev
noch nicht verfügbar. Aber dann wäre Perl schwer vorstellbar!/dev/random
bis es entsperrt, dann lesen Sie ab/dev/urandom
?Antworten:
Perl erlaubt dies mit seiner
syscall
Funktion:Die Dokumentation enthält auch ein Beispiel für den Aufruf von write (2):
Ich kann jedoch nicht sagen, dass ich diese Funktion jemals verwendet habe . Naja, bevor ich das gerade bestätige, klappt das Beispiel in der Tat.
Dies scheint zu funktionieren mit
getrandom
:Und wenn Sie in Ihrer syscall.ph kein getrandom haben, können Sie stattdessen die Nummer verwenden. Es ist 318 auf meiner Debian-Test-Box (amd64). Beachten Sie, dass Linux-Systemrufnummern architekturspezifisch sind.
quelle
In Python können Sie mit dem
ctypes
Modul auf beliebige Funktionen in dynamischen Bibliotheken zugreifen, einschließlichsyscall()
von libc:Wenn Ihre libc die
getrandom()
Wrapper-Funktion enthält, können Sie sie auch aufrufen:quelle
getrandom
direkten Aufruf der libc- Funktion anstelle des syscall hinzuzufügengetrandom
? Ist das möglich?SYS_getrandom
zur Laufzeit dynamisch nachzuschlagen (damit Sie ihn für die aktuelle Plattform richtig einsetzen können)? ZB durch Analysieren von/usr/include
Header-Dateien?Ruby hat eine
syscall(num [, args...]) → integer
Funktion.Beispielsweise:
Mit
getrandom()
:quelle