5.2.3.2 被调用者保存寄存器


文档摘要

5.2.3.2 被调用者保存寄存器 5.2.3.2 被调用者保存寄存器:当 在函数尾声“悄然失踪”,我们究竟在拯救什么? 你有没有过这样的经历—— 一个看似干净的 C 函数,只做几行算术、一次 、两次指针解引用,却在开启 后,在某次特定输入下, 的值在 指令前突然变成 ? 栈帧没崩, 仍对齐, 返回值也正确;可只要你在 GDB 里敲 ,它就固执地显示一个你从未写入过的地址。 更诡异的是:加一行 ,问题消失;删掉一个无关的 ,问题重现;把函数体挪到另一个 文件里,它又不出现了。 这不是玄学。这是被调用者保存寄存器(callee-saved register)契约在真实世界中的一次微小撕裂——而裂缝之下,是 ABI 的钢索、编译器的权衡、以及你亲手写的那行 正在无声地越界。


发布者: 作者: 转发
评论区 (0)
U