首页
社区
课程
招聘
用VC如何实现花指令
发表于: 2005-3-20 22:03 25112

用VC如何实现花指令

2005-3-20 22:03
25112

在VC加入花指令,我在几年前就尝试使用了,一点心得,大家交流:
-----------------------------------------------------------
    1、首先,定义各种花指令的宏,可以单独放到一个.h文件中,也可以直接在程序的首部定义,我建议放到.h文件中。
       注意,所有转移标号和call的地址用相对地址符号$表示,以楼上的问题为例,格式如下:

#define _WJQ_USED_FLOWER  //此开关控制编译器是否使用花指令
//
//花指令定义(定义多少种,自己需要而定)
#ifndef _WJQ_USED_FLOWER
        #define __FLOWER_XX0        _asm nop
#else
#define __FLOWER_XX0 _asm \
{\
  _asm jz  $+5  /*本指令2 bytes len*/\
  _asm jnz $+3  /*本指令2 bytes len*/\
  _asm _emit 0e8h /*本指令1 bytes len*/\
  /*这里是要转移到的地址*/\
}
#endif

     2、根据上述格式,编辑好各种花指令,例如我编辑的10种为:
       __FLOWER_XX0
       __FLOWER_XX1
       __FLOWER_XX2
       .
       .
       .
      __FLOWER_XX9

     3、在VC中的使用方法:
     int  WJQ_Function(char* pStr,DWORD nIndex)
     {
     __FLOWER_XX0
          char buffer[200];
     __FLOWER_XX9
           /*
            buffer的赋值部分(略)
           */
     __FLOWER_XX7
          for(long i=0; i<100; i++)
         {
     __FLOWER_XX2
            pStr[i] = buffer[i];
     __FLOWER_XX5
         }
     __FLOWER_XX4
           return TRUE;
     __FLOWER_XX6
     }

    以上程序中,仅仅通过是否定义了_WJQ_USED_FLOWER来决定是否插入花指令。将 #define _WJQ_USED_FLOWER 注释掉,就可以无花指令调试程序,调试成功后,加入宏定义即可加入花指令。

                               Spring.W
                               2005.3.20


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (16)
雪    币: 332
活跃值: (479)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
2
花指令是否就是你们搞出来的啊,呵呵!有些复杂的花指令去除起来还真是麻烦阿。
2005-3-21 09:37
0
雪    币: 260
活跃值: (81)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
我害怕这个花指令。
2005-3-21 12:05
0
雪    币: 301
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
4
那要是在delphi中,要怎么样实现呢
2005-3-21 15:42
0
雪    币: 117
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最初由 clide2000 发布
那要是在delphi中,要怎么样实现呢


这个里面也能加吗?
2005-3-21 15:46
0
雪    币: 302
活跃值: (410)
能力值: ( LV12,RANK:410 )
在线值:
发帖
回帖
粉丝
6
哈哈。。懒人太多了,一群懒汉,把脑子用坏了怎么办?
2005-3-21 19:58
0
雪    币: 301
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
7
最初由 Spring.W 发布
哈哈。。懒人太多了,一群懒汉,把脑子用坏了怎么办?


言之有理啊,我试了下用
asm  db $74,$04,$75,$02,$e8,$03  end;这样的嵌入方式可以实现简单的花,可还没有尝试出复杂些的,难道只能靠数量吗?
2005-3-21 23:58
0
雪    币: 50161
活跃值: (20630)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
8
2005-3-22 08:23
0
雪    币: 221
活跃值: (137)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
9
全花了,还怎看。对我这种菜鸟还是别花好
2005-3-22 12:50
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10



言之有理啊,我试了下用
asm db $74,$04,$75,$02,$e8,$03 end;这样的嵌入方式可以实现简单的花,可还没有尝试出复杂些的,难道只能靠数量吗?

在Delphi中需要花的地方插入一段code,而且这段code可以任意变形:
asm
  jz @
  jnz @   
  db $e8  //这里到@之间可以插入任和混淆视觉的代码
@:
end;

实践一下,你会得到很多不同花指令组合。
2005-3-22 13:48
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
还不如变个花指令编译器,好的多(不过工程有些恐怖)
2005-3-29 14:46
0
雪    币: 228
活跃值: (119)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
楼主,能把你的.h贴完全吗???只有一个花指令呀,其他的如何弄???
2005-4-1 22:53
0
雪    币: 389
活跃值: (912)
能力值: ( LV9,RANK:770 )
在线值:
发帖
回帖
粉丝
13
能否把头文件上传一下让我等菜鸟共享
2005-5-15 20:34
0
雪    币: 216
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
呵呵 ,来个花指令集锦不错
2005-5-16 00:43
0
雪    币: 232
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
把脑子用坏了怎么办?
2005-5-16 10:47
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
16
学习
2005-5-16 12:15
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
_asm jz        $+5       
_asm jnz        $+3       

00403A4B 0F 84 FF FF FF FF    je          00403A50
00403A51 0F 85 FD FF FF FF    jne         00403A54
00403A57 E8 90 C7 85 8C       call        8CC601EC

为什么我采用该方法后跳转不是按照短跳转编译,变成这个样子了?
2006-7-21 15:16
0
游客
登录 | 注册 方可回帖
返回
//