x86-64 - 为什么 setjmp(3) 不保存 AMD64 上的所有寄存器?

标签 x86-64 setjmp

我正在浏览各种setjmp的来源和 longjmp实现并注意到并非所有 CPU 寄存器都保存在 jmp_buf 中。结构体。查看 AMD64 ABI 后,我注意到只保存了被调用者保存的寄存器。

我不明白仅保存一些寄存器时如何完全恢复功能状态。当然,在我调用 longjmp 之前,未保存的寄存器肯定已经被多次破坏了。稍后的?

然而,一切都很完美,所以肯定有一些我不明白的地方。我希望有人可以对此有所了解。

谢谢!

最佳答案

setjmp function 是一个和其他任何函数一样的函数,因此可以假设它破坏了任何调用者保存的寄存器。因此,它不需要保存/恢复这些寄存器。

关于x86-64 - 为什么 setjmp(3) 不保存 AMD64 上的所有寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11285365/

相关文章:

assembly - 如何使用 64 位绝对地址执行调用指令?

c++ - 在保留顺序的同时将float转换为int64_t

c - setjmp longjmp 在 Netbeans cygwin Windows XP 下崩溃

c - longjmp/setjmp 与 volatile 的安全使用

c - 汇编中的内存分配和寻址

winapi - 如何在不使用高级汇编程序的情况下显示 "Hello, world!"?

x86-64 - 如何在 eBPF 程序中访问 xmm 寄存器

c - 这些被破坏的变量警告有什么意义?

c - 两个独立的 jmp_bufs 如何工作?

c++ - MSVC 警告 4611 关于 setjmp w/POD 结构