nasm과 C++에 대한 연결에 관한 질문이 있습니다. 나는nasm/yasm 인수, C++과의 연결
extern "C" void __cdecl myTest(byte i1, byte i2, int stride, int *width);
로 litte 테스트 함수를 선언하고 난 다음과 같이 호출 :
이byte i1 = 1, i2 = 2;
int stride = 3, width = 4;
myTest(i1, i2, stride, &width);
방법은 디버그 어셈블리에 역할을하고 스택 포인터를 가져 오는 데 사용되는 방법을 살펴 가지고 인수들. 그 이상으로 포인터 인자 값은 어떻게 작동하는지 알아 내기 위해 7로 설정되어야한다. 이것은 다음과 같이 구현됩니다
global _myTest
_myTest:
mov eax, [esp+4] ; 1
mov ebx, [esp+8] ; 2
mov ecx, dword [esp+16] ; width
mov edx, dword [esp+12] ; stride
mov eax, dword [esp+16]
mov dword [eax], 7
ret
컴파일
yasm -f win32 -g cv8 -m x86 -o "$(IntDir)\$(InputName).obj" "$(InputPath)"
를 통해, 다음 C++ 응용 프로그램에 연결. 디버그 모드에서는 모든 것이 잘 동작합니다. 이 함수는 두 번 호출되며 예상대로 작동하지만 릴리스 모드에서는 함수가 한 번 작동하지만 이후의 programm 작업은 실패합니다. near/far라고하는 스택/프레임 포인터에 문제가있는 것처럼 보입니다.하지만이 주제에 익숙하지 않아 조금 도움이 필요합니다. 미리 감사드립니다! a.