在 Windows x64 上,何时允许编译器将 ABI 标记为易失性的寄存器视为非易失性,并给出一些额外的见解?我有一个反汇编函数,r11
用于在函数调用后恢复另一个寄存器的值;当根据this时,r11
它本身被认为是跨函数调用的 volatile 。
例如(来自反汇编函数):
myLibrary!MyClass::currentMemberFunction+0x18:
call myLibrary!MyClass::calledMemberFunction
cmp dword ptr [rsp+68h],0
mov rdi,rax
je myLibrary!MyClass::currentMemberFunction+0x58
test rbx,rbx
mov rcx,r11
je myLibrary!MyClass::currentMemberFunction+0x60
和
myLibrary!MyClass::currentMemberFunction+0x2f:
call myLibrary!MyClass::anotherCalledMemberFunction
mov rdx,rdi
mov rcx,r11