Linux Syscalls Referenz?
-
Moin,
ich bin daran interessiert Assembler zu lernen und mache bereits Fortschritte. Ich lerne mit gas in einer Linux Umgebung, also an Linux ausgerichtet. Was mir nur leider fehlt, und ich auch nicht durch Google finden kann, ist eine einfache Auflistung der Syscalls und deren Parameter. Ich will ja schliesslich auch mal was ausgeben oder einlesen.
Man möge mir vorwerfen ich könne nicht mit Google umgehen, aber ich finde immer nur Syscalls für C/C++.
Ich will nur irgendwo lesen/nachschlagen können welche syscalls es gibt und welche parameter ich dazu in die Register legen muss, bevor ich mit
int $0x80
die Sache ins rollen bringe.
Wenn mir da vielleicht jemand von euch helfen kann
-
-
Danke, dass ist schonmal sehr hilfreich
Jetzt ist mir aber immernoch nicht klar was die Parameter in ebx, ecx und edx bewirken. Die reinen Datentypen geben ja noch keine Auskunft darüber wie der syscall sich durch die parameter beeinflussen lässt
-
Hier hast du mal HelloWorld als Beispiel.
.section .data hello: .ascii "Hello World!\n" .section .text .globl _start _start: movl $4, %eax movl $1, %ebx movl $hello, %ecx movl 13, %edx int $0x80 movl $1, %eax movl $0, %ebx int $0x80
4 (für sys_write) in eax , filedescriptor in ebx, der Zeiger auf den Text in ecx, die Länge des Textes in edx. Was ist daran so schwierig? Du kannst dir ja jeweils die C-Definition zur Hilfe nehmen.
-
h2o202 schrieb:
Danke, dass ist schonmal sehr hilfreich
Jetzt ist mir aber immernoch nicht klar was die Parameter in ebx, ecx und edx bewirken. Die reinen Datentypen geben ja noch keine Auskunft darüber wie der syscall sich durch die parameter beeinflussen lässt
wie der vorposter shon sagte. schau dir die linuxkernel headerdatei
"include/linux/syscalls.h" an. da sind alle C funktionsprototypen für
die syscalls definiert. der variablenname des jeweiligen funktionsparameters
sollte dann aufschluss über dessen funktion gebenedit: in "include/asm-<arch>/unistd.h" findest du die entsprechenden
syscall nummern, welche von architektur zu architektur variieren können. da sich
die syscall nummern mit jeder kernelversion ändern können, sollte dies deine primäre referenz sein