1
在Windows x64上,如果編譯器允許將ABI標記爲非易失性的寄存器作爲非易失性給定一些其他見解?我有一個反彙編功能,其中r11
用於在函數調用後恢復另一個寄存器的值;當根據this時,r11
本身被認爲是跨函數調用的volatile。通過函數調用將「ABI-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
他們在同一翻譯單位。我很習慣處理JIT編譯的代碼,所以這些假設本身就是危險的。我想我需要開始提醒自己,靜態編譯不能太偏執。謝謝。 – shroudednight 2013-04-26 14:53:37