gpt4 book ai didi

linux - 为什么 `__vfprintf_internal` (`printfn` 来自 `stdio.h` ) 强制 `$rbp` 在我的 x86-64 机器上向前跳转 6313864 字节?

转载 作者:行者123 更新时间:2023-12-01 22:52:16 26 4
gpt4 key购买 nike

我很难弄清楚发生了什么。

这是我在 gdb session 中深入研究 Linux 上的 stdio.h 中的 printfn 时看到的内容:

#1 0x00007ffff7ddb81f in __printf (format=) at ./st
dio-common/printf.c:33

488 (gdb) p $rbp

489 $39 = (void *) 0x7ffff798fff8

到目前为止一切顺利。

让我们进入下一个调用(即 __vfprintf_internal)并查看 %rbp 是什么:

(gdb) p $rbp

504 $41 = (void *) 0x7ffff7f95780 <IO_2_1_stdout

两个值之间的差异是 6313864 字节。这怎么可能?发生了什么事?!

附言我明确使用 -fno-omit-frame-pointer 来确保 %rbp 保存。

最佳答案

您可能正在使用 -fno-omit-frame-pointer 进行编译,但看起来 libc 不是。所以 rbp 可以用作 glibc 中的通用寄存器。

关于linux - 为什么 `__vfprintf_internal` (`printfn` 来自 `stdio.h` ) 强制 `$rbp` 在我的 x86-64 机器上向前跳转 6313864 字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74109649/

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