首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“ABI-易失性”寄存器被视为跨函数调用的非易失性寄存器

“ABI-易失性”寄存器被视为跨函数调用的非易失性寄存器
EN

Stack Overflow用户
提问于 2013-04-26 04:01:13
回答 1查看 158关注 0票数 1

在Windows上,什么时候允许编译器将x64标记为易失性的寄存器视为非易失性寄存器?我有一个反汇编函数,其中r11用于在函数调用后恢复另一个寄存器的值;根据thisr11本身被认为是跨函数调用的易失性。

例如(来自反汇编函数):

代码语言:javascript
复制
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

代码语言:javascript
复制
myLibrary!MyClass::currentMemberFunction+0x2f:
    call    myLibrary!MyClass::anotherCalledMemberFunction
    mov     rdx,rdi
    mov     rcx,r11
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-26 06:14:22

这些规则仅适用于对代码生成器一无所知的函数进行调用时。就像稍后链接的另一个翻译单元中的函数。但是,如果类名是相同的,那么您显示的调用很可能位于相同的转换单元中。当代码生成器知道R11没有被修改时,它就不是易失性的。它可能会知道。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16223706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档