首页
社区
课程
招聘
[旧帖] [建议]代码的优化 0.00雪花
发表于: 2009-6-9 21:49 3529

[旧帖] [建议]代码的优化 0.00雪花

2009-6-9 21:49
3529
是:
不是:
单单优化代码的方向无非就是更更小.这 像过去地主希望长工吃的少干的多一样.
但鱼与熊掌不可兼得.我们平时是取折中主义.根据实际需要做取舍
一 积存器清零
下面的写法是笨蛋的做法
1   mov  eax,00000000H  ;5byte
写成下面的做法也比上面好呀;
2   sub   eax,eax               ;2byte
最经典的写法是
3   xor   eax,eax                ;2byte
二 测试积存器是否为0
这种做法很平庸
1  cmp  eax,00000000h     ;5byte
   je      label                      ;2/6btye
(做为累加器eax被大多指令优化了;cmp ebx ;6btye)
2  or     eax,eax                 ;2btye
   je      label                      ;2/6btye
其实把xor改为test也行还不改变psw
要是是eax的话
3 xchg  eax,ecx                  ;1btye
   jecxz label                       ;2btye
三 测试积存器是否为0ffffffffh
有的api返回-1你会
1 cmp   eax,0ffffffffh           ;5byte
   je      label                      ;2/6btye
很正常呀  其实你想一下-1+1=0呀!
2 inc    eax                         ;1
   je     label                        ;2/6
   dec  eax                          ;1
四 置寄存器为0fffffffh
api经常要返回-1?这样就行了
1 mov   eax,0fffffffh             ;5
可这是笨方法
2 xor    eax,eax/sub eax eax ;5
   dec    eax                            ;1
也可以
3 stc                                       ;1
   sbb    eax,eax                     ;2
最绝的是这样
  jnc     label
   sbb    eax,eax
   label:……
五 要知道有了新指令不用是浪费
movzx要会用
  movzx eax,bx                      ;3

待て

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 1491
活跃值: (975)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
2
写的很好。。受教了。。。
2009-6-10 08:58
0
雪    币: 141
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
我还没写完了,你还是等一下夸我吧,其实组合语言的艺术我是看过的,尽管很老。是16位代码的。
而且台湾作者对大陆有点偏见。对GB码很不认同
2009-6-10 12:26
0
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
学习了

字数补丁.exe
2009-6-10 12:47
0
雪    币: 164
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
恩.有道理,学习了.
2009-6-10 20:56
0
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
以前的贴子就有.你是原创吗?
2009-6-10 22:04
0
雪    币: 2242
活跃值: (488)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
7
http://www.pediy.com/bbshtml/BBS5/pediy50098.htm
2009-6-10 22:16
0
游客
登录 | 注册 方可回帖
返回
//