. UNSETFRAME

에필로그의 WOD_SET_FPREG 현재 오프셋을 사용하여 지정된 레지스터 및 오프셋에 대한 해제 코드 항목을 생성합니다.

Syntax

.UNSETFRAME reg, offset

매개 변수

reg
설정되지 않은 프레임 포인터 레지스터입니다.

오프셋
프레임 포인터가 설정된 스택 프레임의 오프셋입니다.

비고

Important

이 지시문은 실험적이며 변경될 수 있습니다. 를 사용하여 해제 버전 3을 ml64.exe /unwindv3사용하도록 설정합니다.

.UNSETFRAME 는 해제 버전 3에서만 유효합니다. 에필로그에 대응합니다 . SETFRAME.

.UNSETFRAME 는 에필로그 지역 내에서만 허용됩니다 . BEGINEPILOG. ENDEPILOG. 이러한 지시문은 해제 메타데이터(.xdata.pdata 섹션)를 생성하지만 실행 코드를 생성하지는 않습니다.
해제 버전 3 .UNSETFRAME 에서는 프레임 포인터 레지스터에서 스택 포인터를 복원하는 명령 앞에 나타나야 합니다.
규약을 보장하기 위해 해제 지시문과 매크로에서 해제하려는 코드를 모두 래핑하는 것이 좋습니다.

해제 버전 3에서 에필로그 지시문은 에필로그 해제 코드 생성에 필수입니다. 에필로그 해제 코드는 쌍 없이 .BEGINEPILOG/.ENDEPILOG 내보내지지 않습니다.

비고

Unwind 버전 1에서 지시문은 해당 명령 후에 나타납니다. Unwind 버전 3에서는 지시문이 명령 앞에 나타납니다.

unwindv3의 예

; 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
   .beginepilog
   .unsetframe rbp, 0
   mov rsp, rbp
   .freestack 010h
   add rsp, 010h
   .popreg rbp
   pop rbp
   .endepilog
   ret
frmex2 ENDP
_text ENDS
END

참고하십시오

x64 해제 버전 3(실험적)
지시문 참조
. SETFRAME
. BEGINEPILOG
MASM BNF 문법