C 컴파일시, 모든 로컬 함수들이 PLT/GOT 안에 저장되도록 강제하는 방법이 있을까요?
바이너리 구동할 때, 도중에 메모리상에 있는 바이너리의 전체 코드섹션의 base 주소를 옮겨야 하는 일이 있어요.
그런데 코드섹션을 옮기면 코드 안에 정의된 함수들의 주소값들이 당연히 바뀌고,
그러면 코드가 구동하는 동안 스택, heap 안에 저장되었던 함수포인터 값들은 그대로이기 때문에 더이상 그전에 포인트하던 함수들을 call할 수 없잖아요.
하지만, 만일 모든 로컬 함수들이 다이나믹 라이브러리의 함수들같이 GOT/PLT를 거쳐서 접근되도록 강제할 수 있다면,
나중에 코드가 옮겨지더라도 GOT, PLT 테이블에 저장된 함수값들만 업데이트해주면 되기 때문에
위의 스택, heap에 저장된 함수포인터 문제들을 해결할 수 있어요.
그래서 C 컴파일시, 모든 로컬 함수들이 PLT/GOT를 통해 call되도록 강제하는 방법을 찾고 있습니다.