MASM Makroları
Ham Sanal İşlemler öğesinin kullanımını kolaylaştırmak için tipik yordam başlangıç ve sonuçları oluşturmak için kullanılabilen ksamd64.inc öğesinde tanımlanmış bir dizi makro bulunur.
Notlar
Makro |
Tanımlama |
---|---|
alloc_stack(n) |
n baytlık bir yığın çerçevesi ayırır (alt rsp, n kullanarak) ve uygun bırakma bilgilerini (.allocstack n) gösterir |
save_reg reg, loc |
Kalıcı kayıt reg dosyasını RSP uzaklık konumu üzerinde yığında kaydeder ve uygun geriye doğru izleme bilgilerini gösterir.(.savereg reg, loc) |
push_reg reg |
Kalıcı kayıt reg dosyasını yığına gönderir ve uygun geriye doğru izleme bilgilerini gösterir.(.pushreg reg) |
rex_push_reg reg |
Bir kayıt yığına 2 byte itme kullanarak kaydedin uygun geriye doğru izleme bilgilerini bu kullanılmalıdır İtme işlevi, tamsayı olduğundan emin olmak için ilk yönergenin işlevinde ise (.pushreg reg). |
save_xmm128 reg, loc |
Kalıcı XMM kayıt reg dosyasını RSP uzaklık konumu üzerinde yığında kaydeder ve uygun geriye doğru izleme bilgilerini gösterir (.savexmm128 reg, loc) |
set_frame reg, uzaklık |
RSP + uzaklık olacak (bir mov veya lea kullanarak) çerçeve kaydedici kaydını ayarlar ve uygun geriye doğru izleme bilgilerini (.set_frame reg, offset) gösterir. |
push_eflags |
Eflags öğelerini pushfq yönergesiyle gönderir ve uygun geriye doğru izleme bilgilerini gösterir (.alloc_stack 8) |
Aşağıda makroların uygun kullanımıyla birlikte örnek işlev giriş bölümü vardır:
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