有关cccccccd的问题!

BrightseaChen 2004-08-04 11:50:00
MOV ESI, DWORD PTR SS:[ESP+10] //esi为一个数
MOV EAX, CCCCCCCD
MOV EDI, EDX
MUL ESI
SHR EDX, 3
ADD EDI, 30
MOV ESI, EDX
-------------------------------------------
象这样的语句我见了好几个了,我想应该是某种计算的优化处理,但一直搞不清楚,不知哪位能告知一声?
...全文
298 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
BrightseaChen 2004-09-08
  • 打赏
  • 举报
回复
>>回复人: dunkel(内心和夜 哪个黑)
>>我想, 最可能的原因应该是迷惑分析人的目的吧.
不是迷惑分析人的,你用vc编译一个再看他的返汇编代码就可发现了
dunkel 2004-08-06
  • 打赏
  • 举报
回复
>> 回复人: BrightseaChen(阿海) ( )
>> 我已经知道答案了,是编译器的优化处理,把除法变成乘法来计算,从而使程序效率提高。

应该不是这样的吧? 从你那个 '完整' 的帖子来看, 这是个将 dword 转换为的字符串形式的, 虽然是 unicode 格式的, 但由于是数字字符, 所以, 只要补 00 就可以了. 它也是采用除 10 取余数的方法:
779A2409 MOV EDI, 0A
779A240E ADD ECX, 2
779A2411 DIV EDI
从后面的那些操作来看, 也只是获得除 10 之后的 '商' 而已:
779A2422 MOV ESI, EDX
779A2424 MOV WORD PTR DS:[ECX-2], DI
779A2428 TEST ESI, ESI
779A242A JA SHORT 779A2405
但其实上面的 div 指令之后, eax 中不就已经是 '商' 了吗? 为什么还要这么做呢? 我想, 最可能的原因应该是迷惑分析人的目的吧.

如果是由高级语言生成的代码的话, 一个除法指令, 难得还比一个乘法指令再加上一堆其它指令还费时间吗?
大熊猫侯佩 2004-08-06
  • 打赏
  • 举报
回复
长见识了!^O^
BrightseaChen 2004-08-05
  • 打赏
  • 举报
回复
我已经知道答案了,是编译器的优化处理,把除法变成乘法来计算,从而使程序效率提高。
不同的除数,0xcccccccd会变成不同的数,大家可以试试,呵呵。
这里,esi=esi/10。
smallmaster 2004-08-05
  • 打赏
  • 举报
回复
iEsi=0xCCCCCCCD*iVar
iEdi=iEdx/8+30
iEsi=iEdx
谁知道这是什么?估计你是把反汇编的代码粘下来的
MOV ESI, DWORD PTR SS:[ESP+10]这个,呵呵
大熊猫侯佩 2004-08-04
  • 打赏
  • 举报
回复
我怎么看像是将16进制数 CCCCCCCD 放到 EAX 寄存器中啊!
难道其中还有玄妙?^O^

BrightseaChen 2004-08-04
  • 打赏
  • 举报
回复
完整的例子有一个
http://soft.winzheng.com/infoview/Article_643.htm
kugou123 2004-08-04
  • 打赏
  • 举报
回复
没有完整代码,不知道什么意思。只知道那是在做乘法运算和移位运算。
大熊猫侯佩 2004-08-04
  • 打赏
  • 举报
回复
难道是和文件破解有关?

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧