当我用VC++ 10编译这段代码时:
DWORD ran = rand();
return ran / 4096;
Run Code Online (Sandbox Code Playgroud)
我得到这个反汇编:
299: {
300: DWORD ran = rand();
00403940 call dword ptr [__imp__rand (4050C0h)]
301: return ran / 4096;
00403946 shr eax,0Ch
302: }
00403949 ret
Run Code Online (Sandbox Code Playgroud)
这是一个干净,简洁,用一个逻辑右移的2的幂代替一个除法.
然而,当我编译这段代码时:
int ran = rand();
return ran / 4096;
Run Code Online (Sandbox Code Playgroud)
我得到这个反汇编:
299: {
300: int ran = rand();
00403940 call dword ptr [__imp__rand (4050C0h)]
301: return ran / 4096;
00403946 cdq
00403947 and edx,0FFFh
0040394D add eax,edx
0040394F sar eax,0Ch
302: }
00403952 ret …
Run Code Online (Sandbox Code Playgroud)