Linux asm x86_64文件创build(__NR_creat 85),没有创build文件

所有,我有x86_64程序集file create困难。 在x86上的文件创build工作正常。 例如,在x86上,使用模式0420调用( __NR_creat 8 )会导致创build一个具有八进制权限0644 octal -rw-r--r--文件权限的文件:

 mov eax, 8 ; system call number (sys_creat) mov ebx, [fnbuf] ; set ebx to filename mov ecx, 0420 ; 644 octal -rw-r--r-- int 0x80 ; call kernel 

asm-x86/unistd_64.h的系统调用号变为85 ,而x86_64上的内核调用约定追踪到( %rdi, %rsi, %rdx, %r10, %r8 and %r9x86_64 ABI(A.2.1 Calling约定) ,我希望文件创build工作在x86_64相同。 改变代码,调用将会变成:

 mov rax, 85 ; __NR_creat x86_64 syscall mov rdi, [ofname] ; filename in rdi mov rsi, 0420 ; 644 octal -rw-r--r-- syscall ; call kernel 

但是,没有创build文件。 x86和x86_64之间是否存在其他差异? 任何帮助,将不胜感激。 我已经通过每一个我可以find关于这个问题的参考,我无法findx86_64 sys_creat差异的任何额外的信息。 我有一个最低可validation的例子: filecreat_64.asmnasm编译和链接是:

 nasm -f elf64 -o filecreat_64.o filecreat_64.asm ld -o filecreat_64 filecreat_64.o 

你需要使用mov rdi, ofname (即没有括号),因为你必须传递文件名的地址。 顺便说一下,在32位上也应该是一样的。

PS:学习使用调试器和strace