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 geben 🙂

    edit: 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 🙂


Anmelden zum Antworten