函数参数是相对于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。 (我用它来了解堆栈框架:Link

发生了什么:两个地址都小于rbp。

我理解错了什么?

在Ubuntu WSL上运行。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)