RtlRestoreContext라는 함수를 사용해야합니다
kernel32, ntdll에서 export 하는 함수인데 vs에서 따로 함수 빠른완성이 안되더라고요
그래서 extern "C" VOID NTAPI RtlRestoreContext(PCONTEXT ContextRecord, PEXCEPTION_RECORD ExceptionRecord);
이렇게 선언을 하고 사용을 했는데 LNK2001에러가 납니다
그래서
#pragma comment(lib, "kernel32.lib")
#pragma comment(lib, "ntdll.lib")
를 달고 해봤는데 동일합니다
동적으로 GetProcAddress로 얻어오면 사용이 가능하긴 한데 코드가 못생겨져서 이건 최후의 방법이고
LNK2001 에러는 링커에서 발생하는 오류로, 링킹 단계에서 심볼이 정의되지 않은 상태로 나타날 때 발생합니다. 이 경우 RtlRestoreContext 함수의 정의를 찾지 못해서 발생한 것으로 보입니다. RtlRestoreContext 함수는 ntdll.dll 내부에 정의되어 있는 함수로, 직접 호출할 수 있어야 합니다. 하지만 Visual Studio에서 제공하는 IntelliSense 기능이나 빠른 완성 기능으로는 외부에 공개된 함수가 아니라서 제대로 지원되지 않을 수 있습니다.
여기에는 몇 가지 확인 및 해결 방법이 있습니다: 함수 프로토타입 확인: RtlRestoreContext 함수의 프로토타입이 맞는지 확인하십시오. 일반적으로는 Windows API 호출과 동일한 방식으로 NTAPI나 WINAPI를 사용하여 프로토타입을 선언할 수 있어야 합니다. Include 헤더 확인: 해당 함수를 사용할 때 필요한 헤더 파일을 올바르게 포함하였는지 확인하십시오. 관련 헤더 파일을 포함하지 않으면 컴파일러가 함수를 인식하지 못합니다. 라이브러리 링크: 해당 함수가 정의된 라이브러리 파일을 링커에게 알려주어야 합니다. 이미 #pragma comment(lib, "ntdll.lib") 를 사용하셨는데, 여전히 링커 오류가 발생하면 올바른 라이브러리 파일이 불러와지고 있는지 확인하십시오.
C++ 링킹 컨벤션: C++에서는 외부 C 함수를 사용할 때, C 함수가 아닌 경우 C++의 이름 맹글링에 의해 함수 이름이 변경될 수 있습니다. C 함수처럼 링킹되도록 이름 맹글링을 막기 위해 extern "C" 블록을 사용하십시오. VS 프로젝트 설정: 프로젝트 설정에서 Windows SDK 및 라이브러리 디렉토리가 올바르게 설정되었는지 확인하십시오. 다른 라이브러리와 충돌하지 않도록 주의하십시오. 링크 에러 메시지 확인: 링크 에러 메시지에 더 자세한 내용이 나와있을 수 있습니다. 해당 메시지를 통해 추가 정보를 확인하고 해결 방법을 찾을 수 있습니다. 만약 이러한 단계들을 확인한 후에도 문제가 지속된다면, 정확한 문제 해결을 위해 더 많은 코드와 컨텍스트를 제공하시면 도움을 드릴수 있을것입니다.