.ALLOCSTACK 는 프롤로 그의 현재 오프셋에 대해 지정된 크기의 UWOP_ALLOC_SMALL 또는 UWOP_ALLOC_LARGE 생성합니다.
구문
.ALLOCSTACK크기
설명
MASM(Microsoft 어셈블러)은 지정된 크기에 가장 효율적인 인코딩을 선택합니다.
.ALLOCSTACK 를 ml64.exe 사용하면 프레임 함수가 해제되는 방식을 지정할 수 있으며 PROCFRAME 선언에서 확장되는 프롤로그 내에서만 허용됩니다 . ENDPROLOG 지시문입니다.
- 이러한 지시문은 해제 메타데이터(
.xdata및.pdata섹션)를 생성하지만 실행 코드를 생성하지는 않습니다. -
.ALLOCSTACK해제할 작업을 실제로 구현하는 지침이 앞에 섰습니다. 해제 지시문과 매크로에서 해제하려는 코드를 모두 래핑하여 규약을 보장합니다.
‘크기’ 피연산자는 8의 배수여야 합니다.
에필로그 대응입니다 . FREESTACK.
예: 해제 버전 3 해제/예외 처리기 지정
다음 샘플에서는 해제/예외 처리기를 지정하는 방법을 보여줍니다.
; ml64 ex3.asm /link /entry:Example3 /SUBSYSTEM:Console
text SEGMENT
PUBLIC Example3
PUBLIC Example3_UW
Example3_UW PROC
; exception/unwind handler body
ret 0
Example3_UW ENDP
Example3 PROC FRAME : Example3_UW
sub rsp, 16
.allocstack 16
.endprolog
; function body
add rsp, 16
ret 0
Example3 ENDP
text ENDS
END
버전 3 해제 동작
Important
해제 버전 3 지원은 실험적이며 변경될 수 있습니다. 를 사용하여 ml64.exe /unwindv3사용하도록 설정합니다.
.ALLOCSTACK는 WOD_ALLOC_SMALLWOD_ALLOC_LARGEWOD_ALLOC_HUGE 프롤로그의 현재 오프셋에 대해 지정된 크기를 사용하여 버전 3 해제 코드 항목을 생성합니다.
.ALLOCSTACK은 설명한 sub rsp, N 명령 앞에 나타나야 합니다. 이 요구 사항은 지시문이 지침을 따르는 버전 1과 반대입니다.
MASM은 할당 크기에 따라 세 가지 해제 코드 중 하나를 내보낸다.
| 언와인드 코드 | Condition |
|---|---|
WOD_ALLOC_SMALL |
크기 ≤ 128바이트 |
WOD_ALLOC_LARGE |
크기 ≤ 32KB |
WOD_ALLOC_HUGE |
크기> 32KB |
버전 1에서만 UWOP_ALLOC_SMALL 또는 UWOP_ALLOC_LARGE.를 생성합니다. 버전 3은 32KB보다 큰 할당에 대해 세 번째 변형 WOD_ALLOC_HUGE을 추가합니다.
비고
Unwind 버전 1에서 지시문은 해당 명령 후에 나타납니다. Unwind 버전 3에서는 지시문이 명령 앞에 나타납니다.
unwindv3의 예
; ml64 ex3.asm /unwindv3 /link /entry:Example3 /SUBSYSTEM:Console
text SEGMENT
PUBLIC Example3
PUBLIC Example3_UW
Example3_UW PROC
; exception/unwind handler body
ret 0
Example3_UW ENDP
Example3 PROC FRAME : Example3_UW
.allocstack 16
sub rsp, 16
.endprolog
; function body
add rsp, 16
ret 0
Example3 ENDP
text ENDS
END