关于子函数的问题?
1,父函数中的自动变量是存储在堆栈中的,从汇编的角度看,子函数可以通过ebp访问堆栈中的内容,比如8(%ebp),那么,在子函数中应该能访问父函数中的自动变量阿?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
1,父函数中的自动变量是存储在堆栈中的,从汇编的角度看,子函数可以通过ebp访问堆栈中的内容,比如8(%ebp),那么,在子函数中应该能访问父函数中的自动变量阿?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(8)
原则上都可以访问.
x86实模式汇编可以,保护就不知道了。
编译角度来看,符号表有作用域的,不是一个作用域的是不可见的。如果一个编译器实现的符号表那么糟糕的话,还是算了吧。
这么做有意义吗?想改变,可以传地址啊
当然可以,可是你觉得有意义吗?
访问父函数的栈内存也是通过栈指针。
那么你想没想过如果是不同的函数都调用了这个函数又怎么办呢?
因为这些都是典型的不走大门而偏要翻窗户的行为,非奸即盗
谢谢各位,不是为了应用,所以没想过有什么意义,只是想知道自己的想法对不对
自然可以,有些语言(比如PASCAL)支持嵌套的函数定义:
用类C语言写:
int father() {
int auto1, auto2;
...
int child() {
int j;
j=auto1;
....
}
....
auto2 = child();
...
}
在某个函数内部定义的函数可以访问父函数的局部变量,甚至父函数的父函数的局部变量。
这些语言的编译器在具体实现时就是通过传递ebp来实现子函数访问父函数局部变量的,一般叫做(static link)。在父函数调用子函数时,父函数将自己的栈帧指针(ebp)作为附加参数push到堆栈中,当子函数希望访问父函数的局部变量时,通过刚才的参数(它一般都在子函数栈帧ebp的固定偏移处)可以得到父函数的栈帧,接着就像访问自己的局部变量一样访问父函数的局部变量。