10 个解决方案
#1
没接触过64位汇编,但我估计是不是也是为了堆栈平衡吧。
#2
不会是用RDI来代替RBP吧,个人猜测
#3
rdi是被调用者保存,如果中间用了rdi干别的事就要这样做
#4
没这个必须,x64函数内部如果使用了这些寄存器,必须先保存再修改,退出时恢复:rbx, rbp, rdi, rsi, r12, r13, r14, r15, xmm6 - xmm15, x87栈,否则不用。
#5
难道是传说中的hot-patch?
看看指令长度吧,没准真的是mov edi,edi一样的呢。
看看指令长度吧,没准真的是mov edi,edi一样的呢。
#6
4楼说的正解
#7
和X86 下的多数调用约定一样,除去易失性寄存器,都需要保存。
X64 下的易失性寄存器有 RAX RCX RDX R8 R9 R10 R11 XMML0-XMML3 XMM4 XMM5
X86 下有 EAX,ECX,EDX
X64 下的易失性寄存器有 RAX RCX RDX R8 R9 R10 R11 XMML0-XMML3 XMM4 XMM5
X86 下有 EAX,ECX,EDX
#8
感觉4楼的是正确答案。。。
#9
这是起到保护寄存器内容的作用,也就是先把他的老本存起来,别一不小心在过程中把它修改了,等你的程序运行完了,再把它提取出来
#10
伪命题,根本不存在你所谓的必须。
#1
没接触过64位汇编,但我估计是不是也是为了堆栈平衡吧。
#2
不会是用RDI来代替RBP吧,个人猜测
#3
rdi是被调用者保存,如果中间用了rdi干别的事就要这样做
#4
没这个必须,x64函数内部如果使用了这些寄存器,必须先保存再修改,退出时恢复:rbx, rbp, rdi, rsi, r12, r13, r14, r15, xmm6 - xmm15, x87栈,否则不用。
#5
难道是传说中的hot-patch?
看看指令长度吧,没准真的是mov edi,edi一样的呢。
看看指令长度吧,没准真的是mov edi,edi一样的呢。
#6
4楼说的正解
#7
和X86 下的多数调用约定一样,除去易失性寄存器,都需要保存。
X64 下的易失性寄存器有 RAX RCX RDX R8 R9 R10 R11 XMML0-XMML3 XMM4 XMM5
X86 下有 EAX,ECX,EDX
X64 下的易失性寄存器有 RAX RCX RDX R8 R9 R10 R11 XMML0-XMML3 XMM4 XMM5
X86 下有 EAX,ECX,EDX
#8
感觉4楼的是正确答案。。。
#9
这是起到保护寄存器内容的作用,也就是先把他的老本存起来,别一不小心在过程中把它修改了,等你的程序运行完了,再把它提取出来
#10
伪命题,根本不存在你所谓的必须。