汇编语言中的系统调用访问

System call access in Assembly language

我想在 Assembly 中进行系统调用(在 linux 上)。 我有系统调用访问的问题。在 C 代码中我写:

int r= syscall(SYS_access,"file", R_OK);
if(r==0){
printf("Can read\n"); 
}

这在 C 中有效,但我不知道如何处理标志并检查 return。这是我的代码:

mov eax, 33 ;system call for access
mov ebx, namefile
mov ecx, 0 ;here is int - flag?
int 80h 
cmp eax,0 ;cmp return?
je .YES

.YES:
mov eax,4 ;write
mov ebx,1 ;terminal
mov ecx,yes ;what I write
mov edx,9 ;4
int 0x80 ;call kernel

如何修复标记并进行比较 return?

这是访问函数:

#define F_OK        0   /* test for existence of file */
#define X_OK        0x01    /* test for execute or search permission */
#define W_OK        0x02    /* test for write permission */
#define R_OK        0x04    /* test for read permission */

小心,这是十六进制代码,但十六进制也可以。 Return 大多数系统调用的值在 EAX 中,但不是全部。一个好的经验法则是,当第一次使用系统调用时,在 EAX 中查找 return 值。如果不存在,您需要进一步研究。

在 EAX 中访问 return。 并检查你的文件。如果你在正确的工作目录中并且你写了正确的文件名。(你的 EBX)