汇编语言中的系统调用访问
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)
我想在 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)