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

时间:2015-04-28 08:42:29

标签: assembly system-calls

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

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

这在C工作中,但我不知道如何处理标志并检查返回。这是我的代码:

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

如何修复标记并比较返回?

1 个答案:

答案 0 :(得分:0)

这是访问功能:

#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 */

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

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