GAS 中的系统调用
System calls in GAS
我正在尝试在 64 位 GNU 中创建一个文件夹,如下所示:
.global main
.text
main:
movl , %edi # SYS_mkdir
movl $folder, %esi # folder_name
movl 77, %edx # flags
call syscall
ret # exit
folder: .string "folder"
此代码有效,但我宁愿使用 "int 0x80" 调用来实现它,但我似乎无法使其正常工作,我试过这样:
mov , %eax
mov $folder, %ebx
mov 77, %ecx
syscall
然而它不起作用,即使我使用 64 位寄存器。
另外,如何将此代码转换为 32 位? (最好使用 int 0x80)
在 64 位语法中,您必须像这样使用系统调用:
mov $folder, %rdi
mov 77, %rsi
mov , %rax
syscall
在 32 位中,您所要做的就是用 32 位寄存器替换寄存器并使用 int 0x80
而不是 syscall
我正在尝试在 64 位 GNU 中创建一个文件夹,如下所示:
.global main
.text
main:
movl , %edi # SYS_mkdir
movl $folder, %esi # folder_name
movl 77, %edx # flags
call syscall
ret # exit
folder: .string "folder"
此代码有效,但我宁愿使用 "int 0x80" 调用来实现它,但我似乎无法使其正常工作,我试过这样:
mov , %eax
mov $folder, %ebx
mov 77, %ecx
syscall
然而它不起作用,即使我使用 64 位寄存器。
另外,如何将此代码转换为 32 位? (最好使用 int 0x80)
在 64 位语法中,您必须像这样使用系统调用:
mov $folder, %rdi
mov 77, %rsi
mov , %rax
syscall
在 32 位中,您所要做的就是用 32 位寄存器替换寄存器并使用 int 0x80
而不是 syscall