mov edi, [0x320F8F4] c++asm里翻译成 mov edi,0x320F8F4
mov edi,[0x0FB142C] c++asm里翻译成 mov edi,[0x0FB142C]
为毛,第一句,翻译的时候没有[]?
假如说规定如此,第2句为什么可以??????
mov edi,[0x0FB142C] c++asm里翻译成 mov edi,[0x0FB142C]
为毛,第一句,翻译的时候没有[]?
假如说规定如此,第2句为什么可以??????
解决方案
10
这两个不一样啊
前一个直接把立即数,赋值给寄存器
后一个,用立即数作为地址偏移量,取出其中的数据,赋值给寄存器
前一个直接把立即数,赋值给寄存器
后一个,用立即数作为地址偏移量,取出其中的数据,赋值给寄存器
10
这是本人生成的反汇编代码:
int main()
{
00274460 push ebp
00274461 mov ebp,esp
00274463 sub esp,0C0h
00274469 push ebx
0027446A push esi
0027446B push edi
0027446C lea edi,[ebp-0C0h]
00274472 mov ecx,30h
00274477 mov eax,0CCCCCCCCh
0027447C rep stos dword ptr es:[edi]
_asm
{
mov edi,[0x320F8F4]
0027447E mov edi,320F8F4h
mov edi,[0x0FB142C]
00274483 mov edi,0FB142Ch
}
return 0;
00274488 xor eax,eax
}
0027448A pop edi
0027448B pop esi
0027448C pop ebx
0027448D add esp,0C0h
00274493 cmp ebp,esp
}
int main()
{
00274460 push ebp
00274461 mov ebp,esp
00274463 sub esp,0C0h
00274469 push ebx
0027446A push esi
0027446B push edi
0027446C lea edi,[ebp-0C0h]
00274472 mov ecx,30h
00274477 mov eax,0CCCCCCCCh
0027447C rep stos dword ptr es:[edi]
_asm
{
mov edi,[0x320F8F4]
0027447E mov edi,320F8F4h
mov edi,[0x0FB142C]
00274483 mov edi,0FB142Ch
}
return 0;
00274488 xor eax,eax
}
0027448A pop edi
0027448B pop esi
0027448C pop ebx
0027448D add esp,0C0h
00274493 cmp ebp,esp
}
10
int x,y;
x = 10;
y = x;
莫非原程序是这样的?
假如是这样的话,就好解释了
前一个是用常量表达式赋值
后一个是用变量赋值,
在不启动(常量代换)优化的话,前一个立即数,赋值
后一个要从地址中取出然后赋值
x = 10;
y = x;
莫非原程序是这样的?
假如是这样的话,就好解释了
前一个是用常量表达式赋值
后一个是用变量赋值,
在不启动(常量代换)优化的话,前一个立即数,赋值
后一个要从地址中取出然后赋值