MS Visual C++ 컴파일러가 Win32 API 가져 오기 호출을 (확인되지 않은) 외부 기호로 처리하도록 할 수 있습니까? 즉MS Visual C++ 컴파일러가 Win32 API 가져 오기 호출을 (확인되지 않은) 외부 기호로 처리합니다.
, 내가하는 어떤 IAT를 참조 dword ptr
전화, 예를 들어 변경해야 외부 기호에
FF 15 00 00 00 00 call dword ptr [[email protected]]
호출을, 예를 들면 :
E8 00 00 00 00 call [email protected]
이 의미하는 컴파일 후 I 연결이 필요하지 않습니다. 분명히 가능하지 않기 때문입니다. 그래서 제품으로 (MS) COFF .obj
Win32 API의 비정상적인 호출 파일을 가져오고 싶습니다.
"분명히"연결이 불가능한 이유는 무엇입니까? –
이것은 거의 이해가되지 않습니다.'__imp_MessageBoxA @ 16'은'_MessageBoxA @ 16'처럼 정확하게 "unresolved"입니다. 차이점은 컴파일러가 WinUser.h에서 포함하는 선언의 __declspec (dllimport) 속성으로 인해 발생합니다. 최적화입니다. 함수를 다시 선언하여 최적화를 수행한다고해서 어떤 방식 으로든 "더 나은"결과를 얻지는 못합니다. 가져 오기 라이브러리를 연결하는 것이 항상 필요합니다. LoadLibrary + GetProcAddress를 사용하는 것만 연결을 피할 수 있습니다. –
@BoPersson, Win32 API 함수는 시작할 때 프로세스에로드되는 시스템 DLL에 정의되어 있기 때문에. 따라서 링크 단계에서 실제 Win32 API 함수를 사용하여 이러한 기호를 해결할 수있는 방법은 없습니다. 그러나 ... 그렇습니다, 나는 "가짜"기호로 연결이 가능하다는 것을 인정해야합니다. – RIscRIpt