我对这里的一些 x86_64 linux 代码(由 llvm 生成)感到有些困惑:
# BB#0: # %entry
push RBP
.Ltmp21:
.cfi_def_cfa_offset 16
.Ltmp22:
.cfi_offset rbp, -16
mov RBP, RSP
.Ltmp23:
.cfi_def_cfa_register rbp
push RBX
push RAX
.Ltmp24:
.cfi_offset rbx, -24
mov EDI, .L.urandom
mov ESI, 8
call open
mov EBX, EAX
mov EDI, EBX
mov ESI, ptrenc.keys
mov EDX, 16
call read
从我在维基百科中读到的内容来看,我希望打开和读取的参数在 R 寄存器(RDI、RSI、RDX)中传递。
该代码使用 64 位寄存器来构建堆栈帧。为什么它使用 32 位寄存器进行调用?