【发布时间】:2017-03-18 19:45:58
【问题描述】:
#define SYS_abcd abcd
#define SYSCALL1(name) \
.globl name; \
name: \
mov $SYS_ ## name, %eax; \
int $T_SYSCALL1; \
ret
SYSCALL1(abcd)
我用来处理它的系统调用代码如下:
char ptr="abcd";
char arg;
arg = (char*)proc->tf->eax;
cprintf(arg);
if(strncmp(ptr, arg, strlen(ptr)) == 0)
proc->tf->eax = 1;
else {
cprintf("unknown call:");
proc->tf->eax = -1;
}
此宏在处理时会将“abcd”放入 EAX 寄存器。但不知何故,我得到了一个垃圾值。是否有不同的方法将字符串移动到 EAX 寄存器?
【问题讨论】:
-
您通常不会将
strings移动到寄存器中,但通常会移动字符串的地址。目前尚不清楚您要在这里做什么。 -
@MichaelPetch-我正在尝试使用系统调用的名称来调用系统调用。所以我需要把字符串放到eax寄存器中,稍后在内核代码中使用。
-
我假设这是一个 xv6 作业?
-
SYS_abcd定义为什么? -
在这种情况下,您必须在某个地方定义
SYS_abcd(可能在某处定义#define)。可能是表示系统调用号的常量值。没有看到你如何定义它,我不能说 EAX 应该是什么
标签: assembly x86 system-calls osdev