不仅进入系统调用时要伪装现场,fork系统调用时返回时也需要伪装现场。因为是“无中生有”。
例如在fork创建新进程时,系统要保证新进程与旧进程一样,从相同的代码开始执行。比如:
pid_t pid;
80483f0: e8 ef fe ff ff call 80482e4 <fork@plt>执行完fork()后,新旧两个进程都执行相同的指令:
80483f5: 89 45 fc mov %eax,0xfffffffc(%ebp)
80483f8: 83 7d fc 00 cmpl $0x0,0xfffffffc(%ebp)
给人的感觉是新进程和旧进程一样,
例如在fork创建新进程时,系统要保证新进程与旧进程一样,从相同的代码开始执行。比如:
#include<stdio.h>
#include<unistd.h>
int main()
{pid_t pid;
if((pid=fork())>0)
{
printf("parent\n");
}
else if(pid==0)
{
printf("child\n");
}
else
printf("error\n");
return 0;
}
在fork()处,也就是执行call指令的过程中,产生了一个新进程。80483f0: e8 ef fe ff ff call 80482e4 <fork@plt>执行完fork()后,新旧两个进程都执行相同的指令:
80483f5: 89 45 fc mov %eax,0xfffffffc(%ebp)
80483f8: 83 7d fc 00 cmpl $0x0,0xfffffffc(%ebp)
给人的感觉是新进程和旧进程一样,