Macros de MASM

Para simplificar el uso de las Pseudoperaciones sin formato, existe un conjunto de macros, definidas en ksamd64.inc, que se pueden usar para crear prólogos y epílogos típicos de procedimientos.

Comentarios

Macro

Descripción

alloc_stack(n)

Asigna un marco de pila de n bytes (utilizando sub rsp, n) y emite la información de desenredo apropiada (.allocstack n)

save_reg registro, ubicación

Guarda un registro del registro no variable en la pila en la ubicación de desplazamiento de RSP y emite la información de desenredo apropiada.(.savereg registro, ubicación)

push_reg registro

Inserta un registro del registro no variable en la pila y emite la información de desenredo apropiada.(.pushreg registro)

rex_push_reg registro

Guarde un registro permanente en la pila mediante una inserción de 2 bytes, y emite el adecuado desenreda la información (registro) de .pushreg This debe usarse si la inserción es la primera instrucción de la función para asegurarse de que la función es activo - patchable.

save_xmm128 registro, ubicación

Guarda un registro del registro XMM no variable en la pila en la ubicación de desplazamiento de RSP y emite la información de desenredo apropiada (.savexmm128 registro, ubicación)

set_frame registro, desplazamiento

Establece el registro del registro de marco como RSP + desplazamiento (mediante mov o lea) y emite la información de desenredo apropiada (.set_frame registro, desplazamiento)

push_eflags

Inserta eflags con una instrucción pushfq y emite la información de desenredo apropiada (.alloc_stack 8)

Este es un ejemplo de prólogo de función con uso apropiado de las 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

Vea también

Referencia

Aplicaciones auxiliares de desenredo para MASM