首页
社区
课程
招聘
[原创]OllyMachine 0.20版源代码发布
发表于: 2004-12-7 15:55 10724

[原创]OllyMachine 0.20版源代码发布

2004-12-7 15:55
10724
下载地址: http://www.luocong.com/om

---------------------
OllyMachine源代码说明
---------------------

1. 前言
2. 简述
3. 如何新增API
4. 联系

----
前言
----
OllyMachine 0.20版是我写的最后一个版本,今后如果没有什么特殊情况,我将不会对它继续更新,因此我在这里公开它的源代码,并且不对其保留任何权利。如果您有需要,可以自行进行修改,但我希望您在修改之后能把源代码寄给我一份。

BTW,请不要问我为什么不再更新了,原因很简单――我是一个穷人,要为生活而奔波。

----
简述
----
OllyMachine是在VC 6.0下开发的,请打开OllyMachine.dsp,然后按F7编译。它大约有10000行源代码,主要分成两个大类:Assembler和VM。

-----------
如何新增API
-----------
请按以下步骤新增API:(有点烦,请耐心看完,但熟悉之后就不会有问题的)

1. 打开文件VM.h,找到这一行;
#define MNEMONIC_COUNTS 122
每新增一个API,就把后面的这个数字加1

2. 打开文件VM.h,找到MNEMONICTYPE这个枚举变量,在它的最后新增您所希望的API的名字,一般命名为:
MC_XXXXXXXX
其中,XXXXXXXX为新的API的名字。

3. 打开文件VM.h,在构造函数CVM()中,新增:
m_Mnemonics[MC_XXXXXXXX] = "XXXXXXXX";
这是为了让Assembler能够识别API的名字。

4. 打开文件VM.h,在构造函数CVM()中,新增:
m_nMnemonicLen[MC_XXXXXXXX] = 1;
这是为了让Assembler在构造符号表的时候能够得到正确的偏移。
一般来说,API的长度都应该为1。

5. 打开文件Assembler.cpp,在函数GenerateCodes()里面,新增:
case MC_XXXXXXXX:
    I(&fii, MC_XXXXXXXX);
    break;
这是为了让Assembler能够对API生成其opcode。

6. 打开文件VM.cpp,在函数Execute()里面,新增:
case MC_VIRTUALFREEEX:
    nRetCode = DoXXXXXXXX();
    VM_STATUS_ERROR(nRetCode);
    m_Cpu.eip += m_nMnemonicLen[MC_XXXXXXXX];
    break;
这是在虚拟机里面调用相应的API实现代码,必须由您自己完成DoXXXXXXXX()这个函数体。

----
联系
----
如果您有任何疑问,请发E-Mail给我:admin@luocong.com
或者在轻描淡写编程论坛可以找到我:http://www.luocong.com/bbs

作者:罗聪
日期:2004年12月7日 15:27
      于珠海金山软件公司毒霸引擎组

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (47)
雪    币: 199
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢你的源码!

只是这样就停止更新的话实在太可惜了!!

wish you good luck
2004-12-7 16:07
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
3
请不要问我为什么不再更新了,原因很简单――我是一个穷人,要为生活而奔波。


感谢老罗的辛勤劳动
无论如何,我想老罗会一直关注、维护这个插件的
2004-12-7 16:13
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
老罗在毒霸引擎组会穷吗?
2004-12-7 16:19
0
雪    币: 255
活跃值: (266)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
5
:D 好人~
2004-12-7 16:19
0
雪    币: 199
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
郁闷,老罗的dll大小是30k,我编译出来的....88k
2004-12-7 16:48
0
雪    币: 383
活跃值: (786)
能力值: ( LV12,RANK:730 )
在线值:
发帖
回帖
粉丝
7
终于 K O
2004-12-7 16:57
0
雪    币: 154
活跃值: (216)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
没时间搞了吧。搞这个要花费很多的时间的。真心真意谢谢你。千年第一顶
2004-12-7 17:01
0
雪    币: 239
活跃值: (473)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
人人像老罗这样就好了!:D :D
2004-12-7 17:03
0
雪    币: 199
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
不如就搞成开源,大家一起来维护
2004-12-7 17:03
0
雪    币: 229
活跃值: (143)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
感谢老罗的无私奉献精神~!
2004-12-7 17:12
0
雪    币: 2199
活跃值: (1975)
能力值: ( LV12,RANK:810 )
在线值:
发帖
回帖
粉丝
12
感谢老罗的辛苦!
2004-12-7 17:25
0
雪    币: 282
活跃值: (233)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
13
非常感谢老罗的辛苦和无私!!!
2004-12-7 19:25
0
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
14
佩服,感谢!
2004-12-7 19:52
0
雪    币: 229
活跃值: (50)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
15
谢谢 !
2004-12-7 20:35
0
雪    币: 153
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
感谢老罗!:D
2004-12-7 20:39
0
雪    币: 323
活跃值: (589)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
17
今天一早起来就遇到这等好事,好人啊!:D
2004-12-8 08:27
0
雪    币: 154
活跃值: (216)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
最初由 springkang[DFCG 发布
今天一早起来就遇到这等好事,好人啊!:D

你是江西吉安的?总算看见一个江西的了。我记得DFCG上有很多的江西人啊,象newlaos、北极熊、飞叶流枫都是江西人。现在都不知道跑哪去了。
2004-12-8 08:34
0
雪    币: 598
活跃值: (282)
能力值: ( LV13,RANK:330 )
在线值:
发帖
回帖
粉丝
19
不支持对不起组织。。。。:p
2004-12-8 09:11
0
雪    币: 690
活跃值: (1821)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
20
学习老罗的无私奉献精神。
2004-12-8 09:43
0
雪    币: 279
活跃值: (375)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
21
这段时间正在学习虚拟机。
老罗可以说一下om的基本原理吗?如内存组织、指令集等,你的源码注解太少了,如看天书:D

另试一下在VC7中编译,CString存在冲突,修改了一下可以编译通过,但执行汇编功能不正常,看来有时间再看看了
2004-12-8 11:55
0
雪    币: 209
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
老罗的好东西,支持.
2004-12-8 12:43
0
雪    币: 223
活跃值: (106)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
23
罗老大,我把你的OllyMachine 手册中文版打包做了个CHM,发上来有没有关系?:o
2004-12-8 14:07
0
雪    币: 1593
活跃值: (766)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
24
最初由 lordor 发布
这段时间正在学习虚拟机。
老罗可以说一下om的基本原理吗?如内存组织、指令集等,你的源码注解太少了,如看天书:D

另试一下在VC7中编译,CString存在冲突,修改了一下可以编译通过,但执行汇编功能不正常,看来有时间再看看了


我也不知道应该怎么说起,你觉得最难的部分在哪里……?如果你的兴趣只在虚拟机部分的话,那么只看VM.cpp和VM.h就够了,opcode定义在VM.h里面。虚拟机的入口和调度在VM.cpp的Execute()函数中,所有的opcode都会在那里运行。
2004-12-8 14:09
0
雪    币: 1593
活跃值: (766)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
25
最初由 temerata 发布
罗老大,我把你的OllyMachine 手册中文版打包做了个CHM,发上来有没有关系?:o


感谢!我对它不保留任何权利了,可以任意蹂躏之...
2004-12-8 14:11
0
游客
登录 | 注册 方可回帖
返回
//