我很難弄清楚發生了什么。
這是我在gdb會議中深入了解 Linux時看到printfn的內容:stdio.h
#1 0x00007ffff7ddb81f in __printf (format=) at ./st
dio-common/printf.c:33488 (gdb) p $rbp
489 $39 =(無效*)0x7ffff798fff8
到目前為止,一切都很好。
讓我們進入下一個呼叫(即__vfprintf_internal),然后看看 %rbp 將是什么:
(gdb) p $rbp
504 $41 = (void *) 0x7ffff7f95780 < IO_2_1_stdout
兩個值之間的差異是6313864位元組。這怎么可能?怎么了?!
PS我明確使用-fno-omit-frame-pointer以確保 %rbp 保存。
uj5u.com熱心網友回復:
您可能正在使用 進行編譯-fno-omit-frame-pointer,但似乎 libc 不是。所以rbp可以用作 glibc 內部的通用暫存器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/517277.html
標籤:Intel Collective linux部件海合会x86-64
