에필로그에서 현재 오프셋의 지정된 크기를 사용하여 WOD_ALLOC_SMALL, WOD_ALLOC_LARGE 또는 WOD_ALLOC_HUGE 해제 코드 항목을 생성합니다.
문법
. . FREESTACK크기
매개 변수
크기
스택에서 할당 취소할 바이트 수입니다. 8의 배수여야 합니다.
비고
Important
이 지시문은 실험적이며 변경될 수 있습니다.
를 사용하여 버전 3 해제를 사용하도록 ml64.exe /unwindv3설정합니다.
- 를 사용할 수 있습니다 . FREESTACK 은 해제 버전 3에서만 가능합니다. 에필로그에 대응합니다 . ALLOCSTACK.
- 를 사용할 수 있습니다 . FREESTACK 은 에필로그 지역 내에서만 . BEGINEPILOG 및 . ENDEPILOG.
- 해제 버전 3에서 . FREESTACK는 스택 할당 취소를
add rsp, N구현하는 명령 앞에 나타나야 합니다. - 규약을 보장하려면 해제 지시문과 매크로에서 해제하려는 코드를 모두 래핑합니다.
- 이러한 지시문은 해제 메타데이터(
.xdata및.pdata섹션)를 생성하지만 실행 코드를 생성하지는 않습니다. - MASM(Microsoft 어셈블러)은 지정된 크기에 가장 효율적인 인코딩을 선택합니다.
MASM은 크기에 따라 세 가지 해제 코드 중 하나를 내보낸다.
| 언와인드 코드 | Condition |
|---|---|
WOD_ALLOC_SMALL |
크기 ≤ 128바이트 |
WOD_ALLOC_LARGE |
크기 ≤ 32KB |
WOD_ALLOC_HUGE |
크기> 32KB |
해제 버전 3에서 에필로그 지시문은 에필로그 해제 코드 생성에 필수입니다. 어셈블러는 쌍 없이 .BEGINEPILOG/.ENDEPILOG 에필로그 해제 코드를 내보내지 않습니다.
비고
Unwind 버전 1에서 지시문은 해당 명령 후에 나타납니다. Unwind 버전 3에서는 지시문이 명령 앞에 나타납니다.
unwindv3의 예
; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
.allocstack 16
sub rsp, 16
.endprolog
; function body
.beginepilog
.freestack 16
add rsp, 16
.endepilog
ret
Example1 ENDP
_text ENDS
END
참고하십시오
x64 해제 버전 3(실험적)
지시문 참조
. ALLOCSTACK
. BEGINEPILOG
MASM BNF 문법