在GNU C中,结果为13.因为使用了静态链接.
否则,如果使用动态链接,则结果为16.
#include <stdio.h>
int h(){
int x = 1;
int g(int z){
return z + x; <------------------ P
}
int f(int y){
int x = y + 1;
return g(x * y);
}
return f(3);
}
int main(){
int a = h();
printf("%d\n", a);
}
Run Code Online (Sandbox Code Playgroud)
在P点,激活记录是
z = 12
x = 4
y = 3
f和指向代码f的指针
g和代码g的指针
x = 1
h和指向代码h的指针
一个
main和指向代码main的指针
是对的吗?
但是,如果函数g返回,它将如何发生?
将删除激活g和激活变量z.
然后在堆栈框架中,查看孔.
洞真的出现了吗?
并且根据内联块,在函数h中,
变量x是最外层的块.(这意味着函数g'块嵌套在变量x的块中)下一个外部块是函数g,下一个函数f ...然后,函数f的静态链接指向函数g的帧指针吗?还是函数h的帧指针?那么函数g的静态链接怎么样?
有什么方法可以随机生成一些不太可能随机生成的激活码来激活软件?我正在为Web应用程序制作一个自动执行系统.
我正在使用C#.