-2
我寫了一個MASM程序並將其動態加載到我的C++應用程序中。 我一直在for循環中調用它,但是在某個點它只是改變循環的迭代器,並且一切都崩潰了。用於循環的Masm DLL程序
循環代碼:
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);
}
}
}
我在F = GFunc(res[1], res[2], res[3]);
得到改變,當我是24
這是MASM程序代碼
GFunc proc Bval: DWORD,
Cval: DWORD,
Dval: DWORD
mov eax, Cval
xor eax, Bval
and eax, Dval
xor eax, Cval
ret
FFunc工作得很好,所以我不要」我真的明白爲什麼會發生這種情況。
我查了拆解:
call dword ptr [GFunc]
add esp,0Ch
add esp,0Ch
似乎以某種方式覆蓋我,至少這就是調試器告訴我。
謝謝!我沒有想到這一點 – Holger