Compartilhar via


Macros MASM

Para simplificar o uso de Pseudo-operações brutas, há um conjunto de macros, definido em ksamd64.inc, que pode ser usado para criar prólogos e epílogos típicos de procedimento.

Comentários

Macro

Descrição

alloc_stack (n)

Atribui um quadro de pilha de bytes de n (usando o rsp new, n), e se chama o apropriado desenrola informações .allocstack (n)

registro de save_reg, lugar

Salva um registro permanente de registro na pilha no lugar do deslocamento de RSP, e o emite-se apropriado desenrolam informações.(registro de .savereg, lugar)

registro de push_reg

Pressiona um registro permanente de registro na pilha, e o emite-se apropriado desenrolam informações.(registro de .pushreg)

registro de rex_push_reg

Salvar um registro permanente na pilha usando um envio de 2 bytes, e o emite-se apropriado desenrolam informações (registro de .pushreg) que isso deve ser usado se o enviar é a primeira instrução na função para garantir que a função está quente - patchable.

save_xmm128 registro, lugar

Salva um registro permanente de registro de MMX na pilha no lugar do deslocamento de RSP, e o emite-se apropriado desenrolam informações (registro .savexmm128, o lugar)

registro de set_frame, deslocamento

Define o registro de registro do quadro para ser deslocado RSP + (usando um movimento, ou pasto), e o emite-se apropriado desenrolam informações (registro de .set_frame, o deslocamento)

push_eflags

Pressiona os eflags com uma instrução de pushfq, e o emite-se apropriado desenrolam informações .alloc_stack (8)

Aqui está um prólogo de função de exemplo com uso adequado de 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

Auxiliares desenrolados para MASM