gpt4 book ai didi

c++ - $fp == $rbp 在 gdb 中吗?

转载 作者:行者123 更新时间:2023-11-28 04:56:31 24 4
gpt4 key购买 nike

$fp 应该等于 gdb 中的 $rbp 吗?换句话说,帧指针(在 gdb 术语中)是否等于基指针(在 x86 术语中)?

根据 https://sourceware.org/gdb/onlinedocs/gdb/Registers.html ,

$fp is used for a register that contains a pointer to the current stack frame

在我的 C++ 程序中它们不相等(在线程中停止):

(gdb) p $fp
$12 = (void *) 0x7fffffffdae8
(gdb) p $rbp
$13 = (void *) 0x7fffffffdb20

如果重要的话,gdb 版本是“GNU gdb (GDB) 7.12”

最佳答案

Is $fp == $rbp in gdb?

不是,因为不是每个处理器都有一个 RBP 寄存器作为开头。

限制对 x86_64 的讨论,不,因为 GDB 文档不 promise 这种等效性。它 promise $fp 是包含指向当前堆栈帧的指针的寄存器的别名。

根据代码的编译方式以及代码的确切停止位置,“等效”寄存器可以是$rbp$rsp,或者这样的寄存器可能根本不存在。在后一种情况下,GDB 似乎“合成”了一个帧指针以指向局部变量的存储位置(如果该函数有的话)。

在通常使用 -fomit-frame-pointer 编译代码的机器上(例如 x86_64),谈论 $fp 很多不如谈论实际机器寄存器有用。

关于c++ - $fp == $rbp 在 gdb 中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47007937/

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