Partilhar via


MASM Macros

Para simplificar o uso de Operações de Pseudo bruto, há um conjunto de macros, definido em ksamd64.inc, que pode ser usado para criar Prólogos do procedimento típico e epilogues.

Comentários

Macro

Description

alloc_stack(n)

Aloca um quadro de pilha de n bytes (usando o rsp sub, n) e emite o apropriado desenrolar informações (.allocstack n)

save_reg reg, loc

Salva a pilha de loc deslocamento do RSP reg um registro de não-volátil e emite informações sobre o desenrolamento apropriadas. (.savereg reg, loc)

push_reg reg

Envia um reg register não-volátil na pilha e emite informações sobre o desenrolamento apropriadas. (.pushreg reg)

rex_push_reg reg

Salvar um registro de não-volátil na pilha usando um estudo de 2 bytes e emite apropriadas desenrolar informações (.pushreg reg), isso deve ser usado se o envio for a primeira instrução na função para garantir que a função é hot patches.

save_xmm128 reg, loc

Salva uma não-volátil XMM registrar reg a pilha do RSP loc de deslocamento e emite o apropriado desenrolar informações (.savexmm128 reg, loc)

set_frame reg, deslocamento

Define o reg de registro de quadro para ser o RSP + offset (usando um mov ou um lea) e emite o apropriado desenrolar informações (.set_frame reg, deslocamento)

push_eflags

Envia o eflags com uma instrução pushfq e emite apropriadas desenrolar informações (.alloc_stack 8)

Aqui está um prólogo da função de exemplo com o uso correto das macros:

SkFrame struct 
Fill    dq ?; fill to 8 mod 16 
SavedRdi dq ?; saved register RDI 
SavedRsi dq ?; saved register RSI 
SkFrame ends

sampleFrame struct
Filldq?; fill to 8 mod 16
SavedRdidq?; Saved Register RDI 
SavedRsi  dq?; Saved Register RSI
sampleFrame ends

sample2 PROC FRAME
alloc_stack(sizeof sampleFrame)
save_reg rdi, sampleFrame.SavedRdi
save_reg rsi, sampleFrame.SavedRsi
.end_prolog

; function body

mov rsi, sampleFrame.SavedRsi[rsp]
mov rdi, sampleFrame.SavedRdi[rsp]

; Here’s the official epilog

add rsp, (sizeof sampleFrame)
ret
sample2 ENDP

Consulte também

Referência

Desenrolar auxiliares para MASM