Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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
.SETFRAMEreg, 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