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