c - 函数参数是相对于 rbp 的负偏移量(据我所知,它们应该是正偏移量)
问题描述
考虑以下程序:
#include <stdio.h>
#include <stdlib.h>
int func(int arg1)
{
int arg2;
arg2 = 0;
return 1;
}
int main()
{
func(2);
return 0;
}
使用 -g 运行 gcc 并启动 gdb,然后查看 rbp、arg1 和 arg2 的地址给了我这个:
Breakpoint 1, func (arg1=2) at test.c:8
8 return 1;
(gdb) p &arg1
$1 = (int *) 0x7ffffffedc6c
(gdb) p &arg2
$2 = (int *) 0x7ffffffedc7c
(gdb) i r rbp
rbp 0x7ffffffedc80 0x7ffffffedc80
期望:arg1 的地址应该大于 rbp,arg2 的地址应该小于 rbp。(我用它来理解堆栈帧:链接
发生了什么:两个地址都小于 rbp。
我理解错了什么?
在 Ubuntu WSL 上运行。
解决方案
推荐阅读
- javascript - 如何从 JavaScript 执行 Kotlin WebAssembly 函数?
- python - 为 LSTM 整形数据,并将密集层的输出馈送到 LSTM
- python - 通过 Celery 连接两个独立的项目
- javascript - 通过 websockets 提交和刷新后表单(react 组件)不可用
- react-native - React Native Modal 中的绝对位置在不同设备上不一致
- javascript - 如何使用 Javascript 从 API 获得部分大响应?
- intellij-idea - IntelliJ 显示误报错误
- ruby-on-rails - mysql2 gem 随机崩溃
- php - 标头位置未采用声明的路径
- c# - 为单个端点设置超时?