.SETFRAME
지정된 레지스터(reg) 및 오프셋(오프셋)을 사용하여 프레임 레지스터 필드와 해제 정보의 오프셋을 채웁니다. 오프셋은 16의 배수여야 하며 240보다 작거나 같아야 합니다. 또한 이 지시문은 UWOP_SET_FPREG
현재 프롤로그 오프셋을 사용하여 지정된 레지스터에 대한 해제 코드 항목을 생성합니다.
구문
. SETFRAME reg, offset
설명
. SETFRAME을 사용하면 ml64.exe 사용자가 프레임 함수를 해제하는 방법을 지정할 수 있으며 PROC FRAME 선언에서 확장되는 프롤로그 내에서만 허용됩니다. ENDPROLOG 지시문입니다. 이러한 지시문은 코드를 생성하지 않습니다. 만 생성 .xdata
하고 .pdata
. . SETFRAME 앞에는 해제할 작업을 실제로 구현하는 지침이 있어야 합니다. 규약을 보장하기 위해 해제 지시문과 매크로에서 해제하려는 코드를 모두 래핑하는 것이 좋습니다.
자세한 내용은 x64용 MASM(ml64.exe)을 참조하세요.
샘플
설명
다음 샘플에서는 프레임 포인터를 사용하는 방법을 보여 줍니다.
코드
; 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