Der Systemaufruf socketcall
ist ein Sonderfall, also verlassen Sie sich nicht auf dieses, um das allgemeine Format zu lernen. Darüber hinaus existieren sie nur auf x86-32, und andere Plattformen verwenden separate Systemaufrufe für jede Funktion/Prozedur der Socket-Operationen (bei diesen Plattformen gibt es keine socketcall
, sondern socket
, bind
usw.).
Für den speziellen Fall, die socketcall
ist: es erwartet __NR_socketcall
eax
in der Teilfunktion (ex SYS_SOCKET
, SYS_BIND
, etc) Zahl in ebx
und die Adresse der anderen Argumente in ecx
. Sie müssen ein Array von 3 Wörtern für den Socket-Vorgang speichern (Erstellen eines Sockets), speichern Sie die Familie in my_array[0]
, geben Sie den Typ in my_array[1]
, und das Protokoll (in der Regel 0) in my_array[2]
, übergeben Sie die Adresse von my_array zu ecx
(Sie übergeben die Nummer des Elements in my_array
in keiner expliziten Weise, es wird von der Socket-Unterfunktion impliziert, die Sie aufrufen).
Sie können diese Dokumente erhalten:
nun für andere Systemaufrufe, die nicht die socketcall
Ausnahme, müssen Sie nur die Referenz der correspoding POSIX-Funktion erhalten (siehe reference) oder der entsprechenden Beschreibung der Funktion von man(2)
(man(2)
ist ein Abschnitt der Handbuchseiten, der den Systemaufrufen gewidmet ist), die Sie hier als Beispiel finden können: man-pages section 2. Dann müssen Sie die Reihenfolge der Argumente notieren.Sie werden das System Rufnummer in eax
, dann alle anderen Argumente in der gleichen Reihenfolge passieren, wie entweder durch man(2)
oder POSIX beschrieben, auf, um, ebx
, ecx
, edx
, esi
, edi
, ebp
(bis zu sechs Argumente). Der Status/das Ergebnis wird in eax
zurückgegeben.
Beachten Sie, dass das obige nur für Linux auf Intel-Architektur gilt (Sie vermuten, dass andere Prozessoren andere Register haben), und beachten Sie auch, dass die Systemrufnummern sich zwischen x86-32 und x86-64 unterscheiden.
'libc' auf 8086? Du hast mich ohnmächtig gemacht! Wie auch immer Sie können hier beginnen - http: //stackoverflow.com/questions/9506353/how-to-invoke-a-system-call-via-sysester-in-inline-assembly-x86-amd64-linux –
https://stackoverflow.com/questions/3614995/linux-system-call-table-or-cheetsheet-in-assembly-language –