gpt4 book ai didi

windows - "ABI-volatile"寄存器被视为跨函数调用的非 volatile

转载 作者:可可西里 更新时间:2023-11-01 11:56:07 26 4
gpt4 key购买 nike

在 Windows x64 上,考虑到一些额外的见解,何时允许编译器将 ABI 标记为 volatile 的寄存器视为非 volatile 寄存器?我有一个反汇编函数,其中 r11 用于在函数调用后恢复另一个寄存器的值;当根据 this , r11 本身在函数调用中被认为是可变的。

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

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

最佳答案

这些规则仅适用于对代码生成器一无所知的函数进行调用时。就像稍后链接的另一个翻译单元中的函数一样。但是,鉴于类名相同,您显示的调用很可能在同一个翻译单元中。当代码生成器知道它没有被修改时,R11 不是 volatile 的。它可以知道。

关于windows - "ABI-volatile"寄存器被视为跨函数调用的非 volatile ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16223706/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com