해당 코드를 실행하면 함수 포인터를 출력한다.
하지만 해당 주소에 가보면 실제 함수 프롤로그가 아닌 실제 주소로 점프하도록 하는 코드가 있다.
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

+ Recent posts