能力值:
( LV6,RANK:90 )
2 楼
有些指令不是人为给出的,是编译器根据情况给出的,刻意强调使用C来实现意义不大。
能力值:
( LV2,RANK:10 )
3 楼
实现什么,实现这段代码吗?
006210C6 B8 3FC82F72 mov eax, 754FC78F
006210CB F7E9 imul ecx
006210CD C1FA 0C sar edx, 0C
能力值:
( LV2,RANK:10 )
4 楼
我没测试,不下结论,闪。
能力值:
( LV2,RANK:10 )
5 楼
太难了。。。。
能力值:
( LV2,RANK:10 )
6 楼
我觉得意义很大,一位要逆向遇到这样的问题都是用内联汇编完成的,难道就不能用等价的C代替?
其实用内联汇编很好,但是就是想知道它在C下的代码是怎么样的!
能力值:
( LV9,RANK:200 )
7 楼
这是编译器对除法的优化。
VC 6 Release模式 编译链接如下代码
int x, y;
cin >> x;
y = x / 8938;
cout << y << endl;
反汇编,除法部分代码如下
00401014 |. B8 610E5175 mov eax,75510E61
00401019 |. F7E9 imul ecx
0040101B |. C1FA 0C sar edx,0C
0040101E |. 8BCA mov ecx,edx
00401020 |. C1E9 1F shr ecx,1F
00401023 |. 03D1 add edx,ecx
不知道是不是不同的编译器优化算法不同(可能楼主发的那个程序使用的是其他编译器编译的),上面这段汇编代码与楼主的代码并不完全相同。
能力值:
( LV2,RANK:10 )
8 楼
LS你贴的代码和你的反汇编是不符合的!
能力值:
( LV9,RANK:200 )
9 楼
注意是 Release模式
能力值:
( LV3,RANK:20 )
10 楼
一定要用C实现的话,也可以
......
LARGE_INTEGER _edx_eax;
long _ecx=...;
long _eax=0x754FC78F;
_edx_eax.QuadPart=LONGLONG(_ecx)*_eax;
long _edx=_edx_eax.HighPart>>0xc;
能力值:
( LV2,RANK:10 )
11 楼
然后表达什么?
我记得论坛讨论过几次了
能力值:
( LV2,RANK:10 )
12 楼
直接内联汇编不是挺好的吗?
能力值:
( LV2,RANK:10 )
13 楼
不懂呀,不过**
能力值:
( LV2,RANK:10 )
14 楼
不懂,我去查查