2016-05-24 11 views

Antwort

2

Immer wenn Syscall ausgelöst werden muss, führt das Benutzer-Space-Programm einen Befehl int 0x80 aus, nachdem einige Werte in den Registern eax, ebx, ecx, edx, esi und edi kopiert wurden, wie von syscall gefordert.

Nachdem int 0x80 ausgeführt wurde, springt PC zum ISR für diesen Softirq.

Routine für Syscall wird von set_system_trap_gate(MY_SYSCALL_VECTOR, entry_INT80_32); eingestellt Sie können es hier überprüfen arch/x86/kernel/traps.c.

und der Einstiegspunkt für Syscall im Kernel ist entry_INT80_32, die in arch/x86/entry/entry_32.S gefunden werden kann und es wird durch Linker-Skript ENTRY(entry_INT80_32) in der gleichen Datei definiert.

Durch diesen Einstiegspunkt können Sie prüfen, wie der Wert der Register eax, ebx, ecx, edx, esi und edi kopiert wird. Dann wird nach Syscall-Nummer zu einem bestimmten Syscall gewechselt, ausgeführt und zurück zum Benutzerbereich gesendet.

+0

Ok Vielen Dank für Ihre Antwort, gibt es eine Relevanz für Netlink? –

+1

obwohl Netlink auch für die Kommunikation zwischen Benutzerraum und Kernelraum verwendet wird, aber nicht im Falle eines Systemaufrufs. Für den Datentransfer zwischen Kernel und Userspace während eines Syscalls werden nur die Register eax, ebx, ecx, edx, esi und edi verwendet. –

+0

Danke samrat :) –