함수의 주소를 구하는 방법을 생각해봤는데요
민트
질문 제목 : 함수의 주소를 구하는 방법을 생각해봤는데요질문 요약 :GetProcAddress에서 인자로 실행파일의 시작주소를 넣어주고 사용자 함수를 찾으려고 합니다질문 내용 :
Colored By Color Scripter™123456789101112131415#includeWindows.h#includestdio.hintmyfunc(){printf(helloworld\n);return0;}voidmain(){FARPROCa;a=GetProcAddress(GetModuleHandle(NULL),myfunc);printf(%x\n%x\n,myfunc,a);}실행해봤는데 a에는 0이 들어가 있었습니다.그래서 한번 발상의 전환을 해 보았습니다.Colored By Color Scripter™12345678910111213141516#includeWindows.h#includestdio.h__declspec(dllexport)intmyfunc(){printf(helloworld\n);return0;}voidmain(){FARPROCa;a=GetProcAddress(GetModuleHandle(NULL),myfunc);printf(%x\n%x\n,myfunc,a);a();}놀랍게도 정상적으로 호출이 됩니다.보통 함수들은 IAT영역에 위치하면서 loader가 실행시간에 정해진 주소에 로드해 준다 라고 알고있었는데dllexport를 붙여주면 IAT에 위치하는게 아니라 EAT에 위치하게 되는건가요? 아니면 양쪽 모두에 위치하게 되는건가요?