int addr;
char *p = NULL;
char b[5]={0};
int k;
_asm
{
mov eax, 0xEEF5EC
mov eax, [eax]
add eax, 0x80
fld [eax]
mov ecx, 0xDA0ED8
fdiv [ecx]
mov eax, 0xB42D10
call eax
mov ebx, eax
mov edi, 0xa8
lea ecx, [edi + edi*2 - 0x195]
shl ecx, 6
sub ecx, ebx
mov eax, ecx
mov addr, eax
xor edi, edi
}
while (TRUE)
{
_asm
{
xor edx, edx
mov eax, addr
mov ebx, eax
mov ecx, 0xa
div ecx
mov addr, eax
mul ecx
sub eax, ebx
neg eax
mov ecx, eax
add ecx, 0x30
lea esi, b
mov[esi + edi], ecx
inc edi
mov edx, 0
mov ebx, edx
mov eax, addr
or eax, ebx
mov k, eax
}
if (k == 0)
break;
}
p = &b[0];
_strrev(p);
AfxMessageBox(p);
VC6.0下,可正確執行并得到正確結果
VS2017,程式崩潰,并且得到的結果錯誤
VS下編譯無錯、無警告。
VS下注釋如下3句則不會崩潰:
p = &b[0];
_strrev(p);
AfxMessageBox(p);
匯編代碼確認無誤。
請大家幫幫我,謝謝。
uj5u.com熱心網友回復:
我估計是動態基址的問題,VC6編譯基址固定,在VS2017中指定固定加載基址試試,代碼中有地址硬編碼,基址不同,地址錯誤uj5u.com熱心網友回復:
先把 那些 立即數 搞清楚 如 0xEEF5EC轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/33454.html
標籤:基礎類
上一篇:SERVER端接入的客戶端對應多個類物件的情況,如何實作?
下一篇:drawitem
