/GUARD (Guard 검사 사용)

실행 파일 이미지에서 Control Flow Guard 검사 지원할지 여부를 링커에 알려줍니다.

구문

/GUARD:CF
/GUARD:NO

설명

/GUARD:CF 링커 옵션은 DLL 또는 EXE 파일의 헤더를 수정하여 CFG(Control Flow Guard) 런타임 검사 대한 지원을 나타냅니다. 또한 링커에서 필요한 제어 흐름 대상 주소 데이터를 헤더에 추가합니다. 기본적으로 사용하지 /GUARD:CF 않도록 설정됩니다. 를 사용하여 /GUARD:NO명시적으로 사용하지 않도록 설정할 수 있습니다. 적용 /GUARD:CF 하려면 기본적으로 설정되는 (주소 공간 레이아웃 임의 /DYNAMICBASE 화 사용) 링커 옵션도 필요합니다.

컴파일러 옵션을 사용하여 /guard:cf 소스 코드를 컴파일하는 경우 컴파일러는 가능한 대상 주소에 대한 모든 간접 호출을 검사하여 제어 흐름을 분석합니다. 컴파일러는 간접 호출 명령의 대상 주소가 런타임에 알려진 대상 주소 목록에 있는지 확인하는 코드를 삽입합니다. CFG를 지원하는 운영 체제는 CFG 런타임 검사에 실패하는 프로그램을 중지합니다. 이 검사 때문에 공격자가 데이터 손상을 사용하여 호출 대상을 변경하여 악성 코드를 실행하기가 더 어려워집니다.

/GUARD:CF CFG 사용 실행 이미지를 만들려면 컴파일러와 링커 모두에 옵션을 지정해야 합니다. 코드를 컴파일하지만 사용하여 /GUARD:CF 연결하지 않으면 런타임 검사 비용이 발생하지만 CFG 보호를 사용하도록 설정하지는 않습니다. /guard:cf 한 단계에서 컴파일하고 연결하는 명령에 옵션을 지정 cl 하면 컴파일러는 링커에 플래그를 전달합니다. Visual Studio /GUARD:CF 에서 Control Flow Guard 속성을 설정하면 이 옵션이 컴파일러와 링커 모두에 전달됩니다. 개체 파일 또는 라이브러리가 별도로 컴파일된 경우 명령에서 link 옵션을 명시적으로 지정해야 합니다.

Visual Studio에서 이 링커 옵션을 설정하려면

  1. 프로젝트에 대한 속성 페이지 대화 상자를 엽니다. 자세한 내용은 컴파일러 및 빌드 속성 설정을 참조 하세요.

  2. 구성 속성>링커>명령줄 속성 페이지를 선택합니다.

  3. 추가 옵션에서 .를 입력합니다/GUARD:CF. 확인을 선택하거나 적용하여 변경 내용을 저장합니다.

프로그래밍 방식으로 이 링커 옵션을 설정하려면

참고 항목

/guard (제어 흐름 보호 사용)
MSVC 링커 참조
MSVC 링커 옵션