【发布时间】:2022-12-20 03:51:52
【问题描述】:
函数的局部变量存储在堆栈中。每次我们调用一个函数时,它的局部变量都有不同的地址。当我们更改变量值时,操作系统/微控制器如何在幕后知道这个特定变量位于这个地址?
【问题讨论】:
-
你问的是ASLR吗?
-
简短的回答是每个函数都有一个栈帧——这是栈中为局部变量保留的区域,并在函数返回时再次释放。在英特尔系统 EBP/RBP 上,ESP/RSP 用于引用与当前堆栈帧相关的数据。
-
因为局部变量是相对的到堆栈,每次运行并不总是相同。相对位置始终相同。