首页
社区
课程
招聘
[求助]这段代码什么意思?如何在C语言里实现?
发表于: 2005-5-14 18:30 6153

[求助]这段代码什么意思?如何在C语言里实现?

2005-5-14 18:30
6153
0040B7A0   .  8B4C24 04     mov ecx, 5E280
0040B7A4   .  B8 C94216B2   mov eax, B21642C9
0040B7A9   .  F7E9          imul ecx
0040B7AB   .  8BC2          mov eax, edx
0040B7AD   .  03C1          add eax, ecx

谢谢!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 1
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
exe
2
eax=5E280*5E280+edx
2005-5-15 12:14
0
雪    币: 208
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hxt
3
两个32位二进制数相乘,所的积的高32位与其中一个数相加
//假设double为32位,long为64位
double x,y;
long z;
x=0x5E280;
y=0xB21642C9;
z=x*y;
z=z>>(32);  //z右移32位
z+=x;
2005-5-15 12:56
0
雪    币: 221
活跃值: (100)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
最初由 exe 发布
eax=5E280*5E280+edx

结果不对吧!

最初由 hxt 发布
两个32位二进制数相乘,所的积的高32位与其中一个数相加
//假设double为32位,long为64位
double x,y;
long z;
x=0x5E280;
y=0xB21642C9;
z=x*y;
z=z>>(32); //z右移32位
z+=x;


好像也不对(如果eax是正数就对了)

我在OD中的跟踪结果
0040B7A0 . 8B4C24 04 mov ecx, 5E280 //ecx=0005E280
0040B7A4 . B8 C94216B2 mov eax, B21642C9  //eax=B21642c9
0040B7A9 . F7E9 imul ecx  //eax=0003D680  edx=FFFE3580
0040B7AB . 8BC2 mov eax, edx  //edx=FFFE3580
0040B7AD . 03C1 add eax, ecx  //eax=FFFE3580+0005E280=41800
最终结果好像是eax与ecx作为无符号数相乘时的高32位
我现在就是没搞明白做imul运算时,eax为负值,eax,edx的值是如何得到的及如何转换成相对应的C语言描述

依然很感谢两位的热心帮助
2005-5-16 19:36
0
雪    币: 221
活跃值: (100)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
自己顶一下
2005-5-17 18:30
0
雪    币: 212
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
关注。 留个位置
2005-5-17 19:35
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
呵呵,弄了好几次也无法编译成楼主的那样
2005-5-18 00:29
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
最后得出结论,高级语言无法编译生成楼主的代码~~
2005-5-18 00:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谁写出了这样的C代码我叫师傅
2005-5-18 00:35
0
雪    币: 14940
活跃值: (4728)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
10
IMUL  OPD,OPS               ;(OPD)*(OPS)-->OPD

IMUL  OPD,OPS,立即数        ;(OPS)*立即数-->OPD

IMUL  OPD,立即数            ;(OPD)*立即数-->OPD

例1 IMUL CL                 ;AL*CL-->AX
例2 IMUL CX,DX              ;CX*DX-->CX
例3 IMUL CX,DX,2            ;DX*2-->CX
例4 IMUL DX,2               ;DX*2-->DX
2005-5-18 01:08
0
雪    币: 221
活跃值: (100)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
11
最初由 huoshan 发布
呵呵,弄了好几次也无法编译成楼主的那样

第一句原文不是这样的!
我跟踪一软件,中间过程,ecx值为5e280,故第一句的机器码应该不是这样的,抱歉!
这是原文
0040B7A0   .  8B4C24 04     mov ecx, dword ptr ss:[esp+4]                                 ;  余数为1时,进入这里比对注册码  ecx=5E280(我这里是先进入它)
0040B7A4   .  B8 C94216B2   mov eax, B21642C9
0040B7A9   .  F7E9          imul ecx                                                      ;  这么大的数相乘,我不懂,请大虾赐教,谢谢
0040B7AB   .  8BC2          mov eax, edx                                                  ;  EAX=3D680, EDX=FFFE3580
0040B7AD   .  03C1          add eax, ecx                                                  ;  EAX=41800
0040B7AF   .  C1F8 04       sar eax, 4                                                    ;  EAX/10
0040B7B2   .  8BC8          mov ecx, eax
0040B7B4   .  C1E9 1F       shr ecx, 1F                                                   ;  查书本,到底sar,shr哪个是哪个循环移位。嘿,水货一个,我
0040B7B7   .  03C1          add eax, ecx                                                  ;  EAX=4180+0=4180
0040B7B9   .  B9 0A000000   mov ecx, 0A
0040B7BE   .  99            cdq
0040B7BF   .  F7F9          idiv ecx                                                      ;  eax=68C, EDX=8
0040B7C1   .  8A4C24 08     mov cl, byte ptr ss:[esp+8]                                   ;  cl=30 (注册码第一位)
0040B7C5   .  33C0          xor eax, eax
0040B7C7   .  80C2 30       add dl, 30                                                    ;  dl=38
0040B7CA   .  3AD1          cmp dl, cl                                                    ;  第一位注册码则为8
0040B7CC   .  0F94C0        sete al
0040B7CF   .  C3            retn
2005-5-18 18:44
0
雪    币: 343
活跃值: (611)
能力值: ( LV9,RANK:810 )
在线值:
发帖
回帖
粉丝
12
0040B7A0   .  8B4C24 04     mov ecx, 5E280
0040B7A4   .  B8 C94216B2   mov eax, B21642C9
0040B7A9   .  F7E9          imul ecx
0040B7AB   .  8BC2          mov eax, edx
0040B7AD   .  03C1          add eax, ecx

这段代码不是全部的;真正的代码应该是
0x5E280 / 23
2005-5-27 19:32
0
游客
登录 | 注册 方可回帖
返回
//