我想在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
如何修复标记并比较返回?
答案 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)