[LINUX] Suche komplette Liste aller Systemcalls



  • Moin!
    Ich suche eine komplette Liste aller Systemaufrufe unter Linux. Ich habe vor kurzem eine Auflistung gefunden: http://www.lxhp.in-berlin.de/lhpsyscal.html

    Allerdings fehlen da haufenweise Register & Co. Also da steht häufig nur der Funktionsname drinne. Das hilft mir bei assembler ohne die libc oder Kernelsourcen nicht viel weiter.

    TIA Hackbert



  • Steht nicht in der Assembler FAQ, was du suchst?



  • Ist nicht das, was ich suche...



  • Hilft nicht /usr/include/asm/unistd.h?



  • Naja, das ist eine nette Auflistung und gibt Aufschluss über die Nummerierung der Systemaufrufe. Allerdings fehlen da die Beschreibungen zu den Parametern. (Nach dem Motto: was kommt worein? (in welches Register)).



  • use the source, luke... äh, hackbert

    auf bald
    oenone



  • hackbert schrieb:

    Naja, das ist eine nette Auflistung und gibt Aufschluss über die Nummerierung der Systemaufrufe. Allerdings fehlen da die Beschreibungen zu den Parametern. (Nach dem Motto: was kommt worein? (in welches Register)).

    Die Liste "/usr/include/asm/unistd.h" und die manpages sind ausreichend!

    So gehst du vor:
    In der "/usr/include/asm/unistd.h" siehst du die Nummer, welche Du brauchst. Die Nummer brauchst Du aber nur wenn Du asm programmierst.
    Und dann schaust Du dir die Beschreibung in den Man pages an!

    Die Syscalls sind im zweiten Kapitel der manuals, ANSI C findest du in dem dritten Kapitel.

    Für den Syscall write gibst Du also in de Konsolle dies ein:

    $ man 2 write

    gruss 🙂



  • Wie die Argumente umgesetzt werden ist ja auf der Seite erklärt:

    http://www.lxhp.in-berlin.de/lhpsyscal.html schrieb:

    eax syscall number
    ebx, ecx, edx, esi, edi arguments
    ebp kernel 2.4.+ 6th argument
    eax single reg return value, no other regs changed
    eax 0xfffff000 < eax <= 0xffffffff may be an error code.
    re glibc2, sysdeps/unix/sysv/linux/i386/sysdep.h

    lies dir vielleicht folgendes durch, falls du damit noch Probleme hast:
    http://asm.sourceforge.net/articles/linasm.html#Syscalls



  • Danke an linu(x)bie und kingruedi 👍 Jetzt weiß ich wie ich vorgehen muss.

    Ich wollte ein kleines Testprogramm schreiben, dass eine Datei erzeugt. Leider mache ich irgendwas falsch. Ich habe nur keinen blassen Schimmer was:

    .section .data
    filename:
    	.ascii "./test.file"
    	.byte 0
    fd:
    	.int 0
    testdata:
    	.ascii "Hier mal ein test"
    	.byte 0
    
    .section .text
    .globl _start
    
    _start:
    	movl $8, %eax 		#syscall nr. 8 = create
    	movl filename, %ebx 	#Name der zu erzeugenden Datei in ebx schieben
    	movl $0102, %ecx	#Dateiberechtigungen
    	int $0x80		#Linux anrufen
    
    ende_status:
    	movl $0, %ebx
    	movl $1, %eax
    	int $0x80
    

    (Habe das hier noch angefügt. Wollte nicht extra ein neues Thema im ASM-Forum aufmachen. Moderatoren mögen mir verzeihen.)



  • habe den Fehler:

    .section .data
    filename:
    	.ascii "./test.file"
    	.byte 0
    fd:
    	.int 0
    testdata:
    	.ascii "Hier mal ein test"
    	.byte 0
    
    .section .text
    .globl _start
    
    _start:
    	movl $8, %eax 		#syscall nr. 8 = create
    	# ES MUSS $filename heißen!!!
    	movl $filename, %ebx 	#Name der zu erzeugenden Datei in ebx schieben
    	movl $0102, %ecx	#Dateiberechtigungen
    	int $0x80		#Linux anrufen
    
    ende_status:
    	movl $0, %ebx
    	movl $1, %eax
    	int $0x80
    

Anmelden zum Antworten