首页 > 解决方案 > 函数参数是相对于 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 上运行。

标签: cassemblyx86x86-64

解决方案


推荐阅读