해당 코드를 실행하면 함수 포인터를 출력한다.
하지만 해당 주소에 가보면 실제 함수 프롤로그가 아닌 실제 주소로 점프하도록 하는 코드가 있다.
MyFunc 함수 이외에도 위 주소 근처를 보면 해당 프로그램에서 사용하는 모든 함수들로 점프하는 코드들이 있다.
원래는 함수포인터는 함수의 시작주소를 갖는게 일반적이지만 위 모습은 일반적이지 않은 모습이다.
이 문제에 대한 원인은 (문제는 아니지만…) 증분 링크 옵션때문이다.
증분링크(Incremental Link)란
매번 컴파일할 때 마다 링킹과정이 계속 반복 되는데 처음 컴파일 할 때 함수 주소들을 테이블에 보관하고
다음 컴파일시 수정된것만 다시 계산하여 좀더 빠르게 링킹을 하도록 하는 기능이다.
증분링킹이 진행되면 초기 ilk파일이 생기고 저 ilk 파일을 토대로 빠른 링킹과정이 진행된다.
저 파일에 문제가 생기면 Visual Studio는 경고를 하고 비증분 링킹으로 전환한다.
warning LNK4076: invalid incremental status file '*.ilk'; linking nonincrementally
|
프로젝트 속성에 들어가 증분링크 옵션을 꺼두고 다시 컴파일한다.
증분링크 옵션을 꺼두고 다시 컴파일하니 함수 프롤로그가 잘 나타나는것을 확인할 수 있다.
'C&C++' 카테고리의 다른 글
WINAPI Options Using Bit Flag (0) | 2019.08.07 |
---|---|
WINAPI CreateProcess Suspend State (0) | 2019.07.11 |
WINAPI VirtualAlloc and VirtualAllocEx Difference (0) | 2019.07.09 |
Features And Uses Of STL Container In C++ (0) | 2018.11.04 |
Modern C++ (1) | 2018.10.02 |