gpt4 book ai didi

谁能解释一下这个 XV6 内联 asm validateint() 测试函数,它使用一个指针作为系统调用的 ESP?

转载 作者:行者123 更新时间:2023-12-04 07:56:45 24 4
gpt4 key购买 nike

嗨~我在 xv6 上工作,我被困在 usertests.c 中的验证测试中.有汇编代码,我对这里到底发生了什么感到很困惑。你愿意为我解释一下吗?

// try to crash the kernel by passing in a badly placed integer
void
validateint(int *p)
{
int res;
printf(stdout,"in validateint\n");
asm("mov %%esp, %%ebx\n\t"
"mov %3, %%esp\n\t"
"int %2\n\t"
"mov %%ebx, %%esp" :
"=a" (res) :
"a" (SYS_sleep), "n" (T_SYSCALL), "c" (p) :
"ebx");
printf(stdout,"%d \n",res);
}
我发现 res正在增加 p但在某些时候 res变为 0,然后变为 -1。整个功能卡住只要 res转到-1。我不知道这里发生了什么。

最佳答案

来自 https://github.com/mit-pdos/xv6-public/blob/eeb7b415dbcb12cc362d0783e41c3d1f44066b17/syscall.c#L10似乎系统调用参数是在堆栈上传递的。所以这段代码的目的似乎是用一个可能无效的堆栈来调用系统调用,即堆栈指针包含一些随机地址 p .
我猜想返回值 0 对应于堆栈指向有效进程内存的时间,如果不是,则返回 -1。

关于谁能解释一下这个 XV6 内联 asm validateint() 测试函数,它使用一个指针作为系统调用的 ESP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66662701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com