我很难弄清楚到底发生了什么.

以下是我在gdb会议中看到的,当我从Linux上的stdio.h深入到printfn时:

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

488 ( gdb ) p

489$39=(空*)0x7ffff798fff8

到目前一切尚好.

让我们进入下一个调用(即__vfprintf_internal),然后查看%RBP:

\65288gdb亿卢比

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

这两个值之间的差值为6313864个字节.那件事怎么可能?怎么回事?!

附注:我显式使用-fno-omit-frame-pointer来确保%RBP保留.

推荐答案

您可能会使用-fno-omit-frame-pointer进行编译,但看起来libc并非如此.因此,rbp可以用作glibc内的通用寄存器.

Linux相关问答推荐

通过shell 脚本基于AM/PM对日期时间字段进行排序

UTF-8输入和使用XGetICValues

条件句if的正确写法是怎样的?

std::chrono::time_zone 在不同操作系统上不可用

如何在REPL控制台中使用PowerShell将特定的CSV列转换为TitleCase?

使用 ansible 验证 firewalld 配置

如何使用awk或其他方法提取双引号中的子字符串?

根据其他列的值创建一个新列

并行制作:将 -j8 设置为默认选项

判断条件是否为假

如何有效地使用 grep?

linux远程执行命令

何时判断 EINTR 并重复函数调用?

为什么 mmap() 比顺序 IO 快?

如何在没有空格的情况下打印 awk?

如何对 /dev/random 或 /dev/urandom 进行 base64 编码?

区分 Windows 和类 Unix 系统的 Makefile

如何通过 xmllint 使用 XSD 验证 XML 文件

如何在 Linux 中将 .so 文件添加到 java.library.path

当我已经 ssh 进入远程机器时,如何 scp 回到本地?