MSVS는 내 기능에서 __stdcall 지시어를 무시합니다. 나는 스택을 수동으로 정리하고 있지만 컴파일러는 각 CALL
다음에 여전히 ADD ESP
명령어를 추가합니다.컴파일러가 __stdcall을 무시합니다
이 나는 함수 선언하는 방법입니다
extern "C" void * __stdcall core_call(int addr, ...);
#define function(...) (DWORD WINAPI) core_call(12345, __VA_ARGS__)
return function("Hello", 789);
을 그리고 이것은 같은 출력이 모습입니다 : 내가 화살표로 표시 한 http://vs712.server4u.cz/msvs.png
MSVS 자동으로 각 후 추가 중복 ADD
지침을, 사실에도 불구하고 스택을 지우는 것이 호출 수신자 책임 (참조 : http://en.wikipedia.org/wiki/X86_calling_conventions#List_of_x86_calling_conventions)이며 이로 인해 내 progrm이 중단됩니다. 수동으로 ADD
지침을 NOPs
으로 바꾼다면 프로그램은 가정 된대로 작동합니다. 그래서, 내 질문은 ... 거기에 지침을 addaing 컴파일러 강제로 방법이 있나요?
감사합니다.
컴파일러가 명시 적으로 요청 된 호출 규칙을 무시할 때 경고가 생성되는지 알고 있습니까? –
답장을 보내 주셔서 감사합니다. 문제가있는 곳을 발견하는 동안 코드를 디버깅하는 데 몇 시간을 보냈습니다. 컴파일러는 약간의 경고를 보여 주었지만, 내가 명시 적으로 지정한 것을 무시하는 이유는 분명하지 않았습니다. 그러나이를 해결하는 방법이 있습니까? 필자는 심지어 core_call 함수에 인수를 전달하기 위해 일부 인라인 어셈블리를 작성하려고했지만 성공하지 못했습니다. – Peter
[this] (http://pastebin.com/Fntqb1j2)와 같은 것을 시도하고 함수 포인터를 사용하십시오. –