프롤로그의 UWOP_PUSH_NONVOL 현재 오프셋을 사용하여 지정된 레지스터 번호에 대한 해제 코드 항목을 생성합니다.
구문
.PUSHREG 레지스터
레지스터 는 다음 중 하나일 수 있습니다.
RAX, RCX, RDX, RBX, RDI, RSI, RBP, R8, R9, R10, R11, R12, R13, R14, R15
해제 버전 3은 R16-R31을 포함하도록 레지스터 지원을 확장합니다.
레지스터 는 다음 중 하나일 수 있습니다.
RAX, RCX, RDX, RBX, RDI, RSI, RBP, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31
설명
ml64.exe 프레임 함수의 해제 방법을 지정하는 데 사용합니다.PUSHREG.
PROCFRAME 선언에서 .로 확장되는 프롤로그 내에서만 사용할 .PUSHREG 수 있습니다. ENDPROLOG 지시문입니다. 이러한 지시문은 해제 메타데이터(.xdata 및 .pdata 섹션)를 생성하지만 실행 코드를 생성하지는 않습니다.
.PUSHREG 해제할 작업을 실제로 구현하는 지침이 앞에 섰습니다. 규약을 보장하려면 해제 지시문과 매크로에서 해제하려는 코드를 모두 래핑합니다.
코드
다음 샘플에서는 비휘발성 레지스터를 푸시하는 방법을 보여 줍니다.
; ml64 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
push r10
.pushreg r10
push r15
.pushreg r15
push rbx
.pushreg rbx
push rsi
.pushreg rsi
.endprolog
; rest of function ...
ret
Example1 ENDP
_text ENDS
END
버전 3 해제 동작
Important
해제 버전 3 지원은 실험적이며 변경될 수 있습니다. 를 사용하여 ml64.exe /unwindv3사용하도록 설정합니다.
참고 항목
Unwind 버전 1에서 지시문은 해당 명령 후에 나타납니다. Unwind 버전 3에서는 지시문이 명령 앞에 나타납니다.
해제 버전 3 .PUSHREG 에서 해제 코드 항목을 생성 WOD_PUSH 하고 설명하는 명령 앞에push reg 나타나야 합니다. 이 요구 사항은 지시문이 지침을 따르는 버전 1과 반대입니다.
unwindv3의 예
; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
.pushreg r10
push r10
.pushreg r15
push r15
.pushreg rbx
push rbx
.pushreg rsi
push rsi
.endprolog
; rest of function ...
ret
Example1 ENDP
_text ENDS
END
에필로그 대응입니다 . POPREG.