x86-64 调用约定假定 return 寄存器已清零?
x86-64 calling convention assumes return registers are zeroed?
给定代码:
uint64_t f() { return 42; }
编译器为 x86-64 输出以下程序集:
movl , %eax
ret
我很惊讶,因为 return 值应该是 64 位的,但是编译器似乎认为假设 return 寄存器 %rax
是安全的%rdi
为零。我似乎无法在 x86-64 ABI 中找到与此相关的任何信息。有人可以指出这个假设的基础吗?
设置EAX
等,无论如何都会清除高32位。
正在查找参考...
实际上它应该作为 this question 的骗局而关闭。
给定代码:
uint64_t f() { return 42; }
编译器为 x86-64 输出以下程序集:
movl , %eax
ret
我很惊讶,因为 return 值应该是 64 位的,但是编译器似乎认为假设 return 寄存器 %rax
是安全的%rdi
为零。我似乎无法在 x86-64 ABI 中找到与此相关的任何信息。有人可以指出这个假设的基础吗?
设置EAX
等,无论如何都会清除高32位。
正在查找参考...
实际上它应该作为 this question 的骗局而关闭。