Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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
Linux 为什么我要获得这些文件权限?_Linux_Assembly_Permissions_X86 64_System Calls - Fatal编程技术网

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

Linux 为什么我要获得这些文件权限?,linux,assembly,permissions,x86-64,system-calls,Linux,Assembly,Permissions,X86 64,System Calls,我编写了一个汇编代码,在其中创建了一个目录和一个文件,它们被创建了,但拥有奇怪的权限-目录是drwxrwxrwx,文件是-r-xr-xr-x 据我所知,更改模式参数可以将文件权限更改为777,但我没有找到更改方式和结果的模式。(777或555) umask设置为0002 为什么我要获得该目录的完全权限?是什么原因导致该文件具有这些权限?我如何更改权限 我使用这两行代码来编译和链接: nasm run.s -f elf64 -o run.o ld run.o -o run 我使用Ubuntu而不

我编写了一个汇编代码,在其中创建了一个目录和一个文件,它们被创建了,但拥有奇怪的权限-目录是
drwxrwxrwx
,文件是
-r-xr-xr-x

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

umask
设置为
0002

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

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

nasm run.s -f elf64 -o run.o
ld run.o -o run
我使用Ubuntu而不是VMWare

代码:

战略:

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

为未来用户添加答案:
显然,出现意外结果的原因是,该程序在具有特殊权限设置(VMWare默认设置)的共享主机目录中运行。

考虑到umask,当我在常规目录中运行此命令时,我会得到预期的结果。

为未来用户添加答案:
显然,出现意外结果的原因是,该程序在具有特殊权限设置(VMWare默认设置)的共享主机目录中运行。

考虑到umask,当我在常规目录中运行时,我得到了预期的结果。

这看起来是正确的。这是什么汇编程序?在我的系统上,这似乎可以正常工作,除了
mynewdir
是使用权限0000创建的,因此
chdir
失败(执行错误检查!)。这真的是你测试的程序吗?@fuz谢谢,我在问题中添加了这些信息。而在我的身上却没有。我刚刚重新执行了它,它也执行了同样的操作。你能为我发布“strace run”的输出吗?通常你会传递octal
0777
以获得权限,从而让umask屏蔽位。您使用的Linux内核版本是什么?也许在您的版本和fuz的内核版本之间,
mode=0
的处理发生了变化?绝对是post
strace
输出。这看起来是正确的。这是什么汇编程序?在我的系统上,这似乎可以正常工作,除了
mynewdir
是使用权限0000创建的,因此
chdir
失败(执行错误检查!)。这真的是你测试的程序吗?@fuz谢谢,我在问题中添加了这些信息。而在我的身上却没有。我刚刚重新执行了它,它也执行了同样的操作。你能为我发布“strace run”的输出吗?通常你会传递octal
0777
以获得权限,从而让umask屏蔽位。您使用的Linux内核版本是什么?也许在您的版本和fuz的内核版本之间,
mode=0
的处理发生了变化?明确地发布
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 +++