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

标签 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

我使用 Ubuntu 而不是 VMWare。

代码:

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 ./run
execve("./run", ["./run"], [/* 63 vars */]) = 0
mkdir("mynewdir", 0)                    = 0
chdir("mynewdir")                       = 0
creat("mynewfile", 0)                   = 3
exit(0)                                 = ?
+++ exited with 0 +++

最佳答案

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

关于linux - 为什么我会获得这些文件权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46897875/

相关文章:

Linux/用宏替换旧字符串

linux - 在 UNIX 中将一个文件的内容附加到另一个文件的开头

将三个数字中的最小到最大排序

winapi - Windows 函数调用中的堆栈是如何设置的?

sql-server-2005 - 如何在限制权限的同时执行 sp_send_dbmail

postgresql - 为什么 PostgreSQL 中没有 SELECT 权限时 UPDATE 权限不起作用?

linux - Eclipse是否有替代方案?

linux - brctl 和虚拟接口(interface)

c - 汇编中的子程序

android inotify_add_watch 失败 : permission denied?