WOD_SAVE_NONVOL 현재 에필로그 오프셋을 WOD_SAVE_NONVOL_FAR 사용하여 지정된 레지스터 및 오프셋에 대한 해제 코드 항목을 생성합니다.
Syntax
.RESTOREREGreg, offset
매개 변수
reg
복원할 비휘발성 레지스터입니다.
오프셋
레지스터가 복원되는 스택 오프셋입니다.
비고
Important
이 지시문은 실험적이며 변경될 수 있습니다. 를 사용하여 버전 3 해제를 사용하도록 ml64.exe /unwindv3설정합니다.
.RESTOREREG 는 해제 버전 3에서만 유효합니다. 에필로그에 대응합니다 . SAVEREG.
MASM(Microsoft 어셈블러)은 지정된 오프셋에 가장 효율적인 인코딩을 선택합니다.
-
.RESTOREREG는 에필로그 지역 내에서만 허용됩니다 . BEGINEPILOG 및 . ENDEPILOG. - 이러한 지시문은 해제 메타데이터(
.xdata및.pdata섹션)를 생성하지만 실행 코드를 생성하지는 않습니다. - 해제 버전 3
.RESTOREREG에서는 스택에서 레지스터를 로드하는 명령 앞에 나타나야 합니다. - 규약을 보장하려면 해제 지시문과 매크로에서 해제하려는 코드를 모두 래핑합니다.
- 해제 버전 3에서 에필로그 지시문은 에필로그 해제 코드 생성에 필수입니다. 에필로그 해제 코드는 쌍 없이
.BEGINEPILOG/.ENDEPILOG내보내지지 않습니다.
Note
Unwind 버전 1에서 지시문은 해당 명령 후에 나타납니다. Unwind 버전 3에서는 지시문이 명령 앞에 나타납니다.
unwindv3의 예
; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
.allocstack 020h
sub rsp, 020h
.savereg rbx, 0
mov [rsp], rbx
.savereg rsi, 8
mov [rsp+8], rsi
.endprolog
; rest of function ...
.beginepilog
.restorereg rsi, 8
mov rsi, [rsp+8]
.restorereg rbx, 0
mov rbx, [rsp]
.freestack 020h
add rsp, 020h
.endepilog
ret
Example1 ENDP
_text ENDS
END