[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.htmlAllerdings 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.hlies 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