Tại sao điều này in rác thay vì thoát khỏi chương trình của tôi một cách duyên dáng? Tôi sử dụng các cuộc gọi hệ thống theo cách này trên BSD, và tôi tự hỏi tôi cần những gì để làm cho nó hoạt động trong Linux.Syscall từ nội tuyến asm trong x86_64 Linux?
int
main(int argc, char **argv)
{
__asm ("movq $1,%rax; movq $0,%rdi; syscall"); /* exit(0) ? */
return 0;
}
Cảm ơn.
cảm ơn bạn! đây chính là nó. Tôi không biết tại sao họ phải thay đổi nó. Vì vậy, BSD sử dụng các số truyền thống trong khi Linux 64 đã thay đổi chúng. Điều này có nghĩa là tôi không thể sử dụng lại mã của mình mặc dù: ( – jbcreix
@jbcreix, vì tò mò * tại sao * bạn sẽ làm điều này thay vì sử dụng các cuộc gọi di động 'exit()' và 'write()'? ? – RBerteig
Các cuộc gọi di động cần liên kết với glibc hoặc các thư viện C. Cách này tôi chỉ có thể thực hiện các chức năng tôi cần theo cách tôi cần và độc lập với hệ điều hành. với mã GPL – jbcreix