Udostępnij za pośrednictwem


Makra MASM

W celu uproszczenia stosowania Pierwotne operacje Pseudo, istnieje zestaw makr, zdefiniowane w ksamd64.inc, który może służyć do tworzenia typowych czynności prologi i epilogues.

Uwagi

Makro

Opis

alloc_stack(n)

Przydziela ramki stosu n bajtów (przy użyciu sub rsp, n) i emituje odkręcanie odpowiednich informacji (.allocstack n)

save_reg reg, loc

Zapisuje reg nieulotna rejestru na stosie w loc przeciwstawne RSP i emituje odkręcanie odpowiednie informacje.(.savereg reg, loc)

push_reg reg

Odkłada reg nieulotna rejestru na stosie i emituje odkręcanie odpowiednie informacje.(.pushreg reg)

rex_push_reg reg

Zapisz nieulotna rejestr na stos za pomocą wypychania 2-bajtowego i emituje odpowiednich informacji (.pushreg reg) ta powinna być używana, jeśli kampania jest pierwszej instrukcji w funkcji w celu zapewnienia, że funkcja ta jest typu hot konfigurowalnym odkręcanie.

save_xmm128 reg, loc

Zapisuje reg nieulotnej z rejestru XMM na stosie w loc przeciwstawne RSP i emituje odkręcanie odpowiednie informacje (.savexmm128 reg, loc)

set_frame reg, przesunięcie

Ustawia reg rejestru ramki, aby być RSP + przesunięcie (używając mov to lub linie wio) i emituje odkręcanie odpowiednie informacje (.set_frame reg, przesunięcie)

push_eflags

Przesuwa eflags za pomocą instrukcji pushfq i emituje odkręcanie odpowiednich informacji (.alloc_stack 8)

Oto prolog funkcja próbki z właściwy sposób użycia makr:

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

Zobacz też

Informacje

Pomocnicy operacji unwind dla MASM