函数调用的现场保护 - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
-
jsr PC,DST
- 将PC[0]入栈
- 程序转入被调用函数
- jsr R5,csv
-
csv函数中
- R2[0]、R3[0]、R4[0]入栈
- R5形成勾连(参看环境指针)
- 至此
- 函数返回地址PC[0]入栈被保护
- R5[0]、R2[0]、R3[0]、R4[0] 均入栈被保护
- R5指向R5[0]的栈内地址形成勾连(参看环境指针)
- 所有必要参量均被保护
-
jmp cret
- 逆序还原R2[0]、R3[0]、R4[0]
- 还原栈顶指针SP←R5
- R5还原勾连(参看环境指针)
- 函数返回
C语言代码
test()
{
printf("Hello,World!");
}
main()
{
test();
return(0);
}
经过编译和反汇编,形成代码
{
printf("Hello,World!");
}
main()
{
test();
return(0);
}