.ALLOCSTACK

.ALLOCSTACK 는 프롤로 그의 현재 오프셋에 대해 지정된 크기의 UWOP_ALLOC_SMALL 또는 UWOP_ALLOC_LARGE 생성합니다.

구문

.ALLOCSTACK 크기

설명

MASM(Microsoft 어셈블러)은 지정된 크기에 가장 효율적인 인코딩을 선택합니다.

.ALLOCSTACKml64.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사용하도록 설정합니다.

.ALLOCSTACKWOD_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

참고 항목

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