- 在汇编中,您应该在调用 C 标准库函数之前备份寄存器吗?
- 标准库是否保证其所有函数都备份调用者的寄存器并最终恢复它们?
- 我在哪里可以找到有关此问题的官方信息?
问问题
353 次
3 回答
3
我认为这里只适用调用约定。http://en.wikipedia.org/wiki/X86_calling_conventions
C 标准库不保证它的函数为调用者备份寄存器。这取决于调用约定以及编译器如何处理它。
假设 C 函数对寄存器一无所知。
你会发现一个函数正在使用哪个调用约定,形成函数的声明/签名。默认应该是 cdecl。
于 2012-06-04T18:12:12.163 回答
2
它是特定于平台的,通常您不需要在调用站点专门保存和恢复寄存器,被调用者通常会这样做。您只需要遵循特定平台的链接约定。C 库不是无状态的,通常在不初始化库的情况下调用一些函数通常不是一个好主意,因为它是在包含 main() 的典型 c 程序对象中完成的。
于 2012-06-04T18:27:36.713 回答
2
这是一个特定于平台的问题,而不仅仅是一个特定于硬件的问题。C 标准库设计为从 C 程序调用,其中调用约定(通常)在编译时处理,并为您完成适当的寄存器和堆栈操作。
请查阅适用于您平台的特定于平台的 ABI 指南,以确定如何调用外部链接函数。
于 2012-06-04T18:15:33.300 回答