汇编函数参数传递与返回值机制疑问:含寄存器及微软API问题
函数参数传递与寄存器相关疑问解答
EBX(64位模式下为RBX)的作用
在Windows x86-64的调用约定里,RBX属于非易失性寄存器:
- 这类寄存器的值在函数调用前后需要保持不变——被调用函数如果要用到RBX,必须先把它的原值压栈保存,函数返回前再恢复,不能直接修改后不管,否则会破坏调用者的上下文。
- 它不负责传递函数参数,前4个参数是用RCX、RDX、R8、R9来传递的,超过4个才会放到栈上。你提供的
AddNumber示例里没用到EBX,所以它在这个函数里没有特殊作用,只是一个需要被调用者保留的通用寄存器。
KeRaiseIrqlToDpcLevel的返回值处理
Windows内核函数完全遵循x86-64的调用约定:
- 整型、指针类型的返回值一律通过RAX寄存器返回。
KeRaiseIrqlToDpcLevel会返回调用前的原始IRQL值,这个返回值确实存储在RAX寄存器中。
内容的提问来源于stack exchange,提问作者trapstar
相关产品推荐
相关产品推荐

