. SETFRAME

Hiermee vult u het veld frameregister en verschuiving in de afwikkelinformatie in met behulp van het opgegeven register (reg) en offset (offset). De offset moet een veelvoud van 16 en kleiner dan of gelijk aan 240 zijn. Deze richtlijn genereert ook een UWOP_SET_FPREG afwikkelcodevermelding voor het opgegeven register met behulp van de huidige proloog-offset.

Syntaxis

.SETFRAME reg, offset

Opmerkingen

Gebruik .SETFRAME deze functie om op te geven hoe een framefunctie tot rust komt. U kunt het alleen gebruiken in de proloog, die zich uitbreidt van de PROCFRAME verklaring tot de . ENDPROLOG-richtlijn . Deze instructies genereren een ontspannen metagegevens (.xdata en .pdata secties), maar produceren geen uitvoerbare code. Ga vooraf aan .SETFRAME instructies waarmee de acties worden geïmplementeerd die niet kunnen worden uitgevoerd. Om de overeenkomst te garanderen, verpakt u zowel de richtlijnen voor afwikkelen als de code die ze zijn bedoeld om in een macro tot rust te komen.

Voorbeeld

Description

In het volgende voorbeeld ziet u hoe u een framepointer gebruikt:

Code

; ml64 frmex2.asm /link /entry:frmex2 /SUBSYSTEM:CONSOLE
_text SEGMENT
frmex2 PROC FRAME
   push rbp
.pushreg rbp
   sub rsp, 010h
.allocstack 010h
   mov rbp, rsp
.setframe rbp, 0
.endprolog
   ; modify the stack pointer outside of the prologue (similar to alloca)
   sub rsp, 060h

   ; we can unwind from the following AV because of the frame pointer
   mov rax, 0
   mov rax, [rax] ; AV!

   add rsp, 060h
   add rsp, 010h
   pop rbp
   ret
frmex2 ENDP
_text ENDS
END

Gedrag van versie 3 tot rust laten komen

Important

Ondersteuning voor versie 3 is experimenteel en kan worden gewijzigd. Schakel het in met behulp van ml64.exe /unwindv3.

In Afwikkelen versie 3 .SETFRAME verzendt u een WOD_SET_FPREG afwikkelcodevermelding voor het opgegeven register met behulp van de huidige proloog-offset. Het vult ook het veld frameregister in en verschoven in de afwikkelinformatie. De offset moet een veelvoud van 16 en kleiner dan of gelijk aan 240 zijn.

Opmerking

In Relax versie 1 komen de instructies na de instructie. In Relax versie 3 komen de instructies vóór de instructie. .SETFRAME moet worden weergegeven voordat de instructie wordt beschreven. Deze vereiste is het tegenovergestelde van versie 1, waarbij de richtlijn de instructie volgt.

Voorbeeld voor relaxv3

; ml64 /unwindv3 frmex2.asm /link /entry:frmex2 /SUBSYSTEM:CONSOLE
_text SEGMENT
frmex2 PROC FRAME
   .pushreg rbp
   push rbp
   .allocstack 010h
   sub rsp, 010h
   .setframe rbp, 0
   mov rbp, rsp
.endprolog
   ; modify the stack pointer outside of the prologue (similar to alloca)
   sub rsp, 060h

   ; we can unwind from the following AV because of the frame pointer
   mov rax, 0
   mov rax, [rax] ; AV!

   add rsp, 060h
   add rsp, 010h
   pop rbp
   ret
frmex2 ENDP
_text ENDS
END

De epiloog tegenhanger is . UNSETFRAME.

Zie ook

x64 Versie 3 tot rust laten komen (experimenteel)
MASM voor x64 (ml64.exe)
Naslaginformatie over richtlijnen
MASM BNF-grammatica