微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

函数参数是相对于rbp的负偏移量据我了解,它们应为正偏移量

如何解决函数参数是相对于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 举报,一经查实,本站将立刻删除。