linux - "sys_open"文件时正确的权限是什么?

标签 linux assembly x86

我正在尝试在 Linux 上使用 x86 程序集读取文件的内容。问题是,我们应该将什么放入 edx - sys_open 的“权限”寄存器。

我以前用过C的open();但没有任何“权限”字段。我正在尝试读取属于可执行文件同一所有者的文件。该文件的权限设置为 0400 (-r--------)。我试过用 edx 打开文件:空 (0)、06660400。它们都将“-13”返回给 eax,这似乎是 EACCES

示例代码:

mov eax, 0x5;     //sys_open
push 0x6362612f //file name in hex, let's say "/abc"
mov ebx, esp;     //filename to ebx
xor ecx, ecx;     //O_RDONLY
mov edx, 0666o;   //permissions in octal for nasm
int 0x80;         //call it

一般情况下(或在这种只读情况下)edx 应该是什么来打开一个文件?文件的当前权限,空的,任意的?

谢谢!

最佳答案

man 2 open :

if neither O_CREAT nor O_TMPFILE is specified, then mode is ignored.

因此,如果您打开现有文件进行阅读,那么在 edx 中放入什么并不重要。你的问题的原因是别的。

关于linux - "sys_open"文件时正确的权限是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54609695/

相关文章:

multithreading - 汇编 - 线程安全的局部变量

x86 - 为什么 “movnti” 后跟一个 “sfence” 保证持久排序?

linux - MS Access *.MDB 转换为 MySQL 或 SQLite,数据编码问题

c - getpwnam() 如何工作?

ubuntu - 如何在 nasm 上运行这个汇编代码?

assembly - 使用替代寄存器的 Z80 汇编

assembly - nasm - 错误 : attempt to define a local label before any non local labels

assembly - 汇编中的 16 位乘法?

linux - Hook 系统调用ubuntu

linux - ld : error in (. eh_frame);不会创建 .eh_frame_hdr 表