我有一个关于nasm及其与C++的链接的问题。我宣布豆蔻测试功能nasm/yasm参数,与C++的链接
extern "C" void __cdecl myTest(byte i1, byte i2, int stride, int *width);
,我这样称呼它:
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++应用程序。在调试模式下,一切正常。该函数被调用几次并按预期工作,而在释放模式下该函数只工作一次,但随后的编程操作失败。在我看来,堆栈/帧指针是近/远的,但我对这个主题很陌生,需要一点帮助。提前致谢! a。