gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:24:14 24 4
gpt4 key购买 nike

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

#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);
}

我使用 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.

我的问题是那些 -0x8(%rbp) 是什么意思?

内存还是寄存器?

我知道 1 存储在 -0x8(%rbp) 中,2 存储在 -0x4(%rbp) 中,我如何显示值那种“地方”?我尝试使用 (gdb) p -0x8(%rbp) 但得到这个:

A syntax error in expression, near `%rbp)'.

最佳答案

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

p *(int *)($rbp - 8)

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

关于c - -0x4(%rbp) 在 gdb 反汇编中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22380693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com