循环内部的Masm DLL过程 我编写了一个MASM程序,并将其动态加载到C++应用程序中。 我一直在for循环中调用它,但在某一点上,它只是更改了循环的迭代器,一切都崩溃了

循环内部的Masm DLL过程 我编写了一个MASM程序,并将其动态加载到C++应用程序中。 我一直在for循环中调用它,但在某一点上,它只是更改了循环的迭代器,一切都崩溃了,c++,dll,masm,C++,Dll,Masm,循环代码: for (int i = 0; i < 64; i++){ if (useAsm){ if (0 <= i && i <= 15){//F F = FFunc(res[1],res[2],res[3]); g = i; } else if (16 <= i && i <= 31){//G F =

循环代码:

for (int i = 0; i < 64; i++){
    if (useAsm){
        if (0 <= i && i <= 15){//F
            F = FFunc(res[1],res[2],res[3]);
            g = i;
        }
        else if (16 <= i && i <= 31){//G
            F = GFunc(res[1], res[2], res[3]);
            g = ((5 * i + 1) & 0x0F);
        }
        else if (32 <= i & i <= 47){//H
            F = HFunc(res[1], res[2], res[3]);
            g = ((3 * i + 5) & 0x0F);
        }
        else if (48 <= i & i <= 63){//I
            F = IFunc(res[1], res[2], res[3]);
            g = ((7 * i) & 0x0F);
        }
    }
}
FFunc工作正常,所以我真的不明白为什么会发生这种情况

我检查了拆卸:

call        dword ptr [GFunc]  
add         esp,0Ch  

<>代码>添加ESP,0CH 似乎是改写了,至少这是调试器告诉我的。

看起来C++编译器认为你的程序集函数遵循这个函数,但是你的汇编函数很可能遵循STDCelp约定。

解决此问题的一种方法是将
GFunc
的声明更改为如下内容:

extern DWORD __stdcall GFunc(DWORD, DWORD, DWORD);

非常感谢。我没想到
extern DWORD __stdcall GFunc(DWORD, DWORD, DWORD);