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

Ser*_*bov 2 linux assembly gcc x86-64

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

以下是我gdb在深入研究 Linux 时在会议printfn中看到的内容stdio.h

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

第 488 章

第489章 39美元=(无效*)0x7ffff798fff8

到目前为止,一切都很好。

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

(gdb) p $rbp

第504章 41美元=(无效*)0x7ffff7f95780< IO_2_1_stdout

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

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

fuz*_*fuz 6

您可能正在使用 进行编译-fno-omit-frame-pointer,但看起来 libc 却没有。因此rbp可以用作 glibc 内的通用寄存器。