针对实践项目 4 中给出的代码片段: *(–krnstack) = ebp; *(–krnstack) = ecx; *(–krnstack) = ebx; *(–krnstack) = 0; 回答问题: (1)子进程第一次执行时,eax=?为什么要等于这个数?哪里的工作让 eax 等 于
时间: 2024-04-22 13:22:51 浏览: 47
一段小程序-Linux内核源代码
在实践项目 4 中的代码片段中,*(–krnstack) = 0; 将 0 压入了内核栈。在子进程第一次执行时,内核会自动将 0 压入子进程的栈中,作为子进程的返回值。因此,子进程第一次执行时,eax 的值应该为 0。
这个值是通过子进程的执行流程得到的。当子进程被创建并调度运行时,它会执行 fork() 系统调用,执行流程会进入内核态。在内核态中,内核会负责复制当前进程的内存空间,包括栈、堆、数据段和代码段等。复制完成后,内核会返回子进程的执行流程,并自动将 0 压入子进程的栈中。因此,子进程第一次执行时,eax 的值就是 0。
阅读全文