我很难弄清楚发生了什么事。
这是我在gdb
当深入研究一个会话时printfn
来自stdio.h
在 Linux 上:
#1 0x00007ffff7ddb81f in __printf (format=) at ./st
dio-common/printf.c:33
488 (gdb) p $rbp
第489章 39美元=(无效*)0x7ffff798fff8
到目前为止,一切都很好。
让我们进入下一个调用(即__vfprintf_internal
)然后看看 %rbp 会是什么:
(gdb) p $rbp
第504章 41美元=(无效*)0x7ffff7f95780IO_2_1_stdout
两个值之间的差异是6313864
字节。这怎么可能?怎么了?!
附:我明确使用-fno-omit-frame-pointer
以确保 %rbp 保存。
您可能正在编译-fno-omit-frame-pointer
,但看起来 libc 不是。所以rbp
可以用作 glibc 内部的通用寄存器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)