【问题标题】:System calls in GASGAS 中的系统调用
【发布时间】:2015-05-07 07:35:15
【问题描述】:

我正在尝试在 64 位 GNU 中创建一个文件夹,如下所示:

.global main

.text
main:
    movl $83, %edi      # SYS_mkdir
    movl $folder, %esi  # folder_name
    movl $0777, %edx    # flags
    call syscall

    ret                 # exit
folder: .string "folder"

此代码有效,但我宁愿使用“int 0x80”调用来实现它,但我似乎无法让它工作,我已经尝试过这样的:

mov $83, %eax
mov $folder, %ebx
mov $0777, %ecx
syscall

但它不起作用,即使我使用 64 位寄存器。

另外我怎么能把这段代码翻译成 32 位? (最好使用 int 0x80)

【问题讨论】:

    标签: assembly system-calls gnu-assembler


    【解决方案1】:

    在 64 位语法中,您必须像这样使用系统调用:

    mov $folder, %rdi
    mov $0777, %rsi
    mov $83, %rax
    syscall
    

    在 32 位中,您只需将寄存器替换为 32 位并使用 int 0x80 而不是 syscall

    【讨论】:

    • "在 32 位中,您所要做的就是用 32 位的寄存器替换寄存器,并使用 int 0x80 而不是 syscall"。并不真地。 32位模式下系统调用号不同(39而不是83),参数进入ebxecx
    • 似乎并非如此,32 位值似乎也适用于 64 位。
    猜你喜欢
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多