-0x4(%rbp) 在 gdb 反汇编中意味着什么?

Red*_*and 6 c gcc gdb disassembly

我目前正在研究 gdb 反汇编,以帮助我了解有关 c 程序的更多细节,因此我编写了 ac 程序:

#include <stdio.h>

void swap(int a, int b){
        int temp = a;
        a = b;
        b = temp;
}
void main(){
        int a = 1,b = 2;
        swap(a, b);
}
Run Code Online (Sandbox Code Playgroud)

我使用 gdb 并运行disass /m main来获取这些:

(gdb) disass /m main
Dump of assembler code for function main:
8   void main(){
   0x0000000000400492 <+0>: push   %rbp
   0x0000000000400493 <+1>: mov    %rsp,%rbp
   0x0000000000400496 <+4>: sub    $0x10,%rsp

9       int a = 1,b = 2;
   0x000000000040049a <+8>: movl   $0x1,-0x8(%rbp)
   0x00000000004004a1 <+15>:    movl   $0x2,-0x4(%rbp)

10      swap(a, b);
   0x00000000004004a8 <+22>:    mov    -0x4(%rbp),%edx
   0x00000000004004ab <+25>:    mov    -0x8(%rbp),%eax
   0x00000000004004ae <+28>:    mov    %edx,%esi
   0x00000000004004b0 <+30>:    mov    %eax,%edi
   0x00000000004004b2 <+32>:    callq  0x400474 <swap>

11  }
   0x00000000004004b7 <+37>:    leaveq 
   0x00000000004004b8 <+38>:    retq   

End of assembler dump.
Run Code Online (Sandbox Code Playgroud)

我的问题是这些-0x8(%rbp)意味着什么?

存储器还是寄存器?

我确实知道 1 存储在-0x8(%rbp)2 中-0x4(%rbp),我如何显示这些“位置”中的值?我尝试使用(gdb) p -0x8(%rbp)但得到这个:

A syntax error in expression, near `%rbp)'.
Run Code Online (Sandbox Code Playgroud)

Aki*_*nen 3

gdb 中的寄存器可以用前缀“$”引用

p *(int *)($rbp - 8)
Run Code Online (Sandbox Code Playgroud)

RBP 和 RSP 最有可能指的是内存位置,特别是堆栈。其他寄存器或多或少是通用寄存器,也可以指向内存。