问题描述
让我们以单个函数中的以下示例为例:
first_function:
pushq %rbp
movq %rsp,%rbp
movq $2,-8(%rbp)
movq $4,-16(%rbp)
...
pop %rbp
ret
如果我们查看...
之前的堆栈,它将为我们提供:
>>> x/4g $rbp-16
0x7fffffffe410: 0x0000000000000004 0x0000000000000002
0x7fffffffe420: 0x0000000000000000 0x00000000004000bd
或者对我来说,一种更简单的可视化方法是:
+----------------+--------------------+---------------------------+
| 0x7fffffffe420 | 0x00000000004000bd | # function return address |
+----------------+--------------------+---------------------------+
| 0x7fffffffe418 | 0x0000000000000000 | # from push %rbp |
+----------------+--------------------+---------------------------+
| 0x7fffffffe410 | 0x0000000000000002 | # from mov $2,-8(%rbp) |
+----------------+--------------------+---------------------------+
| 0x7fffffffe408 | 0x0000000000000004 | # from mov $4,-16(%rbp) |
+----------------+--------------------+--------------------------
然后我的问题是不是一个子函数调用(例如,如果我在...
部分中调用了另一个函数调用)可能破坏了我在上面添加的所有两个变量({{1} }和2
)?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)