Pergunta

Por que esse lixo de impressão em vez de sair meu programa graciosamente? I usar o sistema chama deste modo em BSD, e eu me pergunto o que eu preciso para fazê-lo funcionar no Linux.

int
main(int argc, char **argv)
{
    __asm ("movq $1,%rax; movq $0,%rdi; syscall"); /* exit(0) ? */
    return 0;
}

Graças.

Foi útil?

Solução

Por que esse lixo de impressão em vez de sair meu programa graciosamente?

Por CESA-2009-001 , "syscall 1 é saída em i386, mas write on x86_64" .

o que eu preciso para fazê-lo funcionar em Linux

Use os ordinais syscall do atual unistd_64.h

Espero que isso ajude!

Outras dicas

SYSCALL 1 é saída em i386, mas escrita em x86-64 eu acredito.

EDIT: isto parece imprecisa: De acordo com a web, o que não parece ter muita informação sobre x86-64 Linux montagem esta parece ser a configuração do registo esperado antes da instrução syscall.

 rax  system call number
 rbx  arg0
 rcx  return address from syscall
 rdx  arg2
 rsi  arg3
 rdi  arg4
 r8   arg5
 r9   arg1    (expected by gcc in %rcx)
 r10-r15  should be saved/restored by C code
 rbp  dito What is dito??
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top