Assembly 系统调用气体
我尝试在64位GNU中创建一个文件夹,如下所示: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
.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位。