Volevo controllare il codice per eseguire chiamate di sistema in glibc. Ho trovato qualcosa di simile.È syscall un'istruzione su x86_64?
ENTRY (syscall)
movq %rdi, %rax /* Syscall number -> rax. */
movq %rsi, %rdi /* shift arg1 - arg5. */
movq %rdx, %rsi
movq %rcx, %rdx
movq %r8, %r10
movq %r9, %r8
movq 8(%rsp),%r9 /* arg6 is on the stack. */
syscall /* Do the system call. */
cmpq $-4095, %rax /* Check %rax for error. */
jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */
L(pseudo_end):
ret /* Return to caller. */
Ora la mia domanda è se la syscall (prima dell'istruzione cmpq
) è un'istruzione? In secondo luogo, se si tratta di un'istruzione, qual è il significato di ENTRY (syscall)? Lo stesso nome per un'ENTRATA (non so cos'è un'immissione) e istruzioni? In secondo luogo, cos'è L (pseudo_end)?
Lo è. Fa lo stesso di 'int 0x80' in x86. – Dave
Si noti che per ogni chiamata di sistema viene utilizzato un codice normalmente specializzato, per impostare '% rax' da una costante (salvando un registro) e per saltare l'impostazione degli argomenti non utilizzati. – o11c