汇编可以将数据存储在寄存器或堆栈中。只有堆栈的顶部可以在任何时候访问(对吧?)。考虑下面的C代码:组件如何访问/存储堆栈中的变量
main(){
int x=2;
func();
}
func(int x){
int i;
char a;
}
当打电话FUNC()被压入堆栈以下(考虑32位系统):
variable x (4 bytes, pushed by main)
<RETURN ADDRESS> (4 bytes pushed by main?)
<BASE POINTER> (4 bytes pushed by func())
variable i (4 bytes, pushed by func())
variable a (1 byte, pushed by func())
我有以下问题:
在C代码中,您可以从函数内的任何位置访问本地变量,但是在汇编中,您只能访问堆栈的顶部。 C代码被翻译成汇编(在机器代码中,但汇编是它的可读形式)。那么程序集如何支持读取不在栈顶的变量?
在我的例子中,我是否遗漏了任何会被推入堆栈的东西?
在程序集中,如果你推动堆栈上的一个char或一个int,它如何确定它需要推送4个字节还是1个字节?因为它使用相同的操作(推)正确吗?
在此先感谢 Gr。 Maricruzz
谢谢!是否也有可能在某处看到堆栈的当前内容?任何工具呢? – Maricruzz
@Maricruzz任何体面的调试器都应具有该功能。 –