为什么我会获得这些文件权限?

时间:2017-10-23 20:22:55

标签: linux assembly permissions x86-64 system-calls

我编写了一个汇编代码来创建一个目录和一个文件,并且它们已经创建但具有奇怪的权限 - 目录是drwxrwxrwx,文件是-r-xr-xr-x

据我所知,更改mode参数可以将文件权限更改为777,但我没有找到更改方式和结果的模式。 (这是777或555)。

umask设置为0002

为什么我获得该目录的完全权限?什么原因导致文件的这些权限?我该如何更改权限?

我使用这两行来编译和链接:

nasm run.s -f elf64 -o run.o
ld run.o -o run

我在VMWare上使用Ubuntu。

代码:

section    .data

dir_name:          db      'mynewdir', 0
dir_mode           equ     0

file_name:         db      'mynewfile', 0
file_mode          equ     0

section    .text

global     _start

_start:
    mov rdi, dir_name
    mov rsi, dir_mode
    mov rax, 83                ; sys_mkdir
    syscall

    mov rdi, dir_name
    mov rax, 80                ; sys_chdir
    syscall

    mov rdi, file_name
    mov rsi, file_mode
    mov rax, 85                ; sys_creat
    syscall

    mov rdi, 0
    mov rax, 60        ; sys_exit
    syscall

strace的:

$ strace ./run
execve("./run", ["./run"], [/* 63 vars */]) = 0
mkdir("mynewdir", 0)                    = 0
chdir("mynewdir")                       = 0
creat("mynewfile", 0)                   = 3
exit(0)                                 = ?
+++ exited with 0 +++

1 个答案:

答案 0 :(得分:0)

为将来的用户添加答案:
显然,出现意外结果的原因是程序在具有特殊权限设置的共享主机目录(VMWare默认值)中运行。
当我在常规目录中运行它时,我得到了我期望的结果,考虑到umask。