구조체 UNWIND_INFO
해제 데이터 정보 구조체는 함수가 스택 포인터에 미치는 영향과 스택에서 비volatile 레지스터가 저장되는 위치를 기록하는 데 사용됩니다.
UBYTE: 3 |
버전 |
UBYTE: 5 |
Flags |
UBYTE |
프롤로그 크기 |
UBYTE |
해제 코드 수 |
UBYTE: 4 |
프레임 레지스터 |
UBYTE: 4 |
프레임 레지스터 오프셋(배율 조정) |
USHORT * n |
해제 코드 배열 |
variable |
아래의 (1) 또는 (2) 형식이 될 수 있음 |
(1) 예외 처리기
ULONG |
예외 처리기의 주소 |
variable |
언어별 처리기 데이터(선택적) |
(2) 연결 된 해제 정보
ULONG |
함수 시작 주소 |
ULONG |
함수 끝 주소 |
ULONG |
해제 정보 주소 |
UNWIND_INFO 구조체는 메모리에 DWORD 정렬되어야 합니다.각 필드의 의미는 다음과 같습니다.
버전
해제 데이터의 버전 번호입니다. 현재 1입니다.Flags
현재 세 가지 플래그가 정의되어 있습니다.UNW_FLAG_EHANDLER 함수 예외를 검사 하는 데 필요한 함수를 찾을 때 호출 해야 하는 예외 처리기를 있습니다.
예외를 해제 하는 때 호출 해야 하는 종료 처리기를 UNW_FLAG_UHANDLER 함수를 있습니다.
UNW_FLAG_CHAININFO이 해제 정보 구조체는 기본 절차에 대 한 아닙니다.대신, 연결된 해제 정보 엔트리는 이전 RUNTIME_FUNCTION 엔트리의 콘텐츠입니다.연결된 해제 정보 구조체에 대한 설명은 다음 텍스트를 참조하십시오.이 플래그를 설정한 경우에는 UNW_FLAG_EHANDLER 및 UNW_FLAG_UHANDLER 플래그를 해제해야 합니다.또한 프레임 레지스터와 고정 스택 할당 필드의 값은 기본 해제 정보의 값과 동일해야 합니다.
프롤로그 크기
함수 프롤로그의 바이트 단위 길이입니다.해제 코드 수
해제 코드 배열의 슬롯 수입니다.UWOP_SAVE_NONVOL 같은 일부 해제 코드를 사용하려면 배열에 슬롯이 두 개 이상 있어야 합니다.프레임 레지스터
0이 아닌 경우 함수에서 프레임 포인터를 사용하고 이 필드는 UNWIND_CODE 노드의 작업 정보 필드에 대해 동일한 인코딩을 사용하여 프레임 포인터로 사용되는 비volatile 레지스터의 번호가 됩니다.프레임 레지스터 오프셋(배율 조정)
프레임 레지스터 필드가 0이 아닌 경우 이 필드는 이를 설정할 때 FP 레지스터에 적용되는 RSP에서 배율 조정하여 오프셋됩니다.실제 FP 레지스터는 (RSP + 16 * 이 필드의 값)으로 설정되며 오프셋 범위는 0에서 240까지입니다.따라서 FP 레지스터가 동적 스택 프레임의 로컬 스택 할당의 중간을 가리키게 되므로 짧은 명령을 통해 코드를 간결하게 만들 수 있습니다. 명령이 길면 부호 있는 8비트 오프셋 형식을 사용할 수 있습니다.해제 코드 배열
비volatile 레지스터와 RSP에 대한 프롤로그의 영향을 설명하는 항목의 배열입니다.개별 항목의 의미는 UNWIND_CODE에 대한 설명을 참조하십시오.맞춤을 위해 이 배열의 엔트리 수는 항상 짝수이며 마지막 엔트리는 사용되지 않을 수 있습니다. 마지막 엔트리를 사용하지 않는 경우 배열은 해제 코드 필드의 수에서 지정한 것보다 하나 더 길어집니다.예외 처리기의 주소
UNW_FLAG_CHAININFO 플래그를 해제하고 UNW_FLAG_EHANDLER 또는 UNW_FLAG_UHANDLER 플래그 중 하나를 설정한 경우 함수의 언어별 예외/종료 처리기에 대한 이미지를 기준으로 한 포인터입니다.언어별 처리기 데이터
함수의 언어별 예외 처리기 데이터입니다.이 데이터의 형식은 지정되어 있지 않으며 사용 중인 특정 예외 처리기에 따라 전적으로 결정됩니다.연결된 해제 정보
UNW_FLAG_CHAININFO 플래그를 설정한 경우 UNWIND_INFO 구조체는 세 개의 UWORD로 끝납니다.이러한 UWORD는 연결된 해제의 함수에 대한 RUNTIME_FUNCTION 정보를 나타냅니다.