首页
社区
课程
招聘
[代码之美]自主命题-空指令生成演示
发表于: 2008-9-29 08:26 15270

[代码之美]自主命题-空指令生成演示

2008-9-29 08:26
15270
发一篇绿叶衬托一下大家。希望能再次获得鼓励的幸运的参与大奖。
早就想写这个空指令生成模块,以用于vm生成器中,借这个机会把这个想法实现。
不是美丽的代码,只是参与一下,匆忙写就,还有很多不满意的地方,比如数据结构等,借此机会希望高手指点下。

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 101
活跃值: (88)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
2
如果完全不考虑维持寄存器的值,应该没有问题。

如果要考虑维持寄存器的值,就要考虑操作是否满足交换律和结合律。
2008-10-1 00:13
0
雪    币: 2316
活跃值: (129)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
3
维持了寄存器数值,所有指令组合等同于nop指令.
2008-10-4 19:18
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
4
eflag不等同于nop
2008-10-4 19:34
0
雪    币: 2316
活跃值: (129)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
5
eflag确实不能等同.使用前后要保护和恢复一下flag.
在vm下,或许可以不考虑这个寄存器。
2008-10-4 22:41
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
6
为什么不考虑?
2008-10-4 22:42
0
雪    币: 2316
活跃值: (129)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
7
假使vm中不再用到eflag.
如vm里的vm_test,vm_cmp等指令的实现,不再依据eflag.就不考虑它了.
******
2008-10-4 22:51
0
雪    币: 101
活跃值: (88)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
8
我刚开始理解错了,以为每组指令生成后是每条随机插入的队列。

又看了一下代码, 按组插是没问题的。挺好。
2008-10-4 23:30
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
9
狼 - 哈姆太朗 - 狼 - 哈姆太朗 - 狼 - 哈姆太朗 - 狼 - 哈姆太朗
2008-10-4 23:33
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
10
学习 +  期待
2008-10-6 12:25
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
11
才发现少个头文件。。。
2009-2-28 16:14
0
雪    币: 2316
活跃值: (129)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
12
//NOP_generator Module (Demo)
//ShellWolf
//2008.09.28 ver 0.0.0.1

#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>

void * buff;                //À¬»øÖ¸Áî´æ·Å¿Õ¼äÖ¸Õë
int  Deep=4096;                //µÝ¹éÉî¶È£¬¾ö¶¨À¬»øÖ¸Áî×éºÏµÄ×ÜÊý
WORD  offset=0x0000;//´æ´¢¿Õ¼äµÄÆ«ÒƵØÖ·

//buff
#define Buff_64K                1024*64
#define        buffptr(off)        ((BYTE *)buff+off)
//rand
#define rand_WORD                ((rand()+rand())&0xffff)
#define rand_REG                (rand()%6+1)
#define rand_32                        (rand()%31+1)
//mnemonic
#define M_NONE  0x00
#define PUSH        0x01
#define POP                0x02
#define PUSHF        0x03
#define POPF        0x04
#define PUSHAD        0x05
#define POPAD        0x06
#define INC                0x07
#define DEC                0x08
#define ADD                0x09
#define SUB                0x0a
#define ROL                0x0b
#define ROR                0x0c
#define NOT                0x0d
#define XOR                0x0e
#define NEG                0x0f
#define XCHG        0x10
#define NOP                0x11
//reg32
#define EAX                0x01
#define EBX                0x02
#define ECX                0x03
#define EDX                0x04
#define ESI                0x05
#define EDI                0x06
#define EBP                0x07
#define ESP                0x08
//reg16
#define AX                0x11
#define BX                0x12
#define CX                0x13
#define DX                0x14
#define SI                0x15
#define DI                0x16
#define BP                0x17
#define SP                0x18
//operand type
#define T_NONE  0x00
#define T_REG   0x01
#define T_IMM_7FFF  0x02//0-0x7fff
#define T_IMM_1F  0x03//1-31

#define rol(a,b) ((a<<b)|(a>>(32-b)))

#define Distribution 0x01//0 ÏßÐÔ£¬1 Èý´Î·½³Ì

struct Operand//²Ù×÷Êý
{
        BYTE type;
        DWORD val;
};

struct Instruction//Ö¸Áî
{
        BYTE mnemonic;
        struct Operand op[2];
        WORD nextptr;
};

int size_Instruction=sizeof(Instruction);
2009-2-28 19:55
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
13
无法学习,只能膜拜。
2009-2-28 20:05
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
14
这是什么东东?
2009-2-28 20:34
0
雪    币: 2316
活跃值: (129)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
15
这个是生产垃圾指令的垃圾代码。
2009-2-28 21:54
0
雪    币: 97697
活跃值: (200839)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
16
Nooby, это произошло в зарубежных странах, слышал, ваше имя.
2009-3-2 02:42
0
游客
登录 | 注册 方可回帖
返回
//