Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 系统调用气体_Assembly_System Calls_Gnu Assembler - Fatal编程技术网

Assembly 系统调用气体

Assembly 系统调用气体,assembly,system-calls,gnu-assembler,Assembly,System Calls,Gnu Assembler,我尝试在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" mov $83, %eax mov

我尝试在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"
mov $83, %eax
mov $folder, %ebx
mov $0777, %ecx
syscall
这段代码可以工作,但是我更愿意使用“int 0x80”调用来实现它,但是我似乎无法让它工作,我已经这样尝试过:

.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"
mov $83, %eax
mov $folder, %ebx
mov $0777, %ecx
syscall
但是,即使我使用64位寄存器,它也不起作用


另外,我如何将此代码转换为32位?(最好使用int 0x80)

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

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

在32位中,您所要做的就是将寄存器替换为32位寄存器,并使用
int 0x80
而不是
syscall

“在32位中,您所要做的就是将寄存器替换为32位寄存器,并使用
int 0x80
而不是
syscall
”。不是真的。在32位模式下,系统调用号不同(39而不是83),参数在
ebx
ecx
中。情况似乎并非如此,32位值似乎也适用于64位。