首页
社区
课程
招聘
在VB中使用内嵌汇编
发表于: 2006-5-18 09:30 16829

在VB中使用内嵌汇编

2006-5-18 09:30
16829

    看了软件加密技术内幕的最后关于VB内嵌汇编的部分,可惜小楼前辈对这部分讲的不是很详细,对我等菜鸟来说实在是不明不白。尤其是VBInlineAsm只是一笔带过,都不知道是怎么加载的,后来经过摸索,总算有点眉目,写出来供我等菜鸟分享心得:
一、启动VB6,选择菜单-外接程序-外接程序管理器-选中 Visual Component Manager6.0,勾选“在启动中加载”和“加载/卸载”。

二、重新启动VB6,这时,工具栏中已经多了个Visual Component Manager ,点击打开组建管理器,新建一组建文件夹,新建一个部件,选中VbInLineASM.dll即可,类型为COM Server Library,完成后工具栏中多出个VbInLineASM的ASM图标 .

三、先装好MASM编译器,设置好ML.EXE和LINK.EXE,然后设置VbInLineASM。点击ASM图标,选择Change Settings ,在底部的Assembler Path中选择ML.EXE的路径,一般在MASM的BIN文件夹下,勾选Keep Setting UP后按ESC键退出。


四、使用方法:
*VB中新建一个类
*声明方法:Public Function Test(Byval Argument1)
           End Function
*ASM语句格式:'#ASM_START
               ...
              '#ASM_END

五、一个实例:

Option Explicit

Dim ct As CTest, ct2 As CTest

Private Sub cmd2_Click()
    Set ct2 = New CTest
    MsgBox ct2.ClsFunc, , "cls #2"
End Sub

Private Sub cmdTesting_Click()
    Set ct = New CTest
    MsgBox ct.ClsFunc, , "cls #1"
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Set ct = Nothing
    Set ct2 = Nothing
    Set frmInterface = Nothing
End Sub

================CTest.CLS===============
Option Explicit

Public Function ClsFunc() As Long
'''The "_ClsFunc" variables are added by VB....

'#ASM_START
'  push ebp             ;Save EBP
'  mov ebp, esp         ; Move ESP into EBP so we can refer
'                       ;   to arguments on the stack
'  push ebx
'  push esi             ;save registers
'  push edi
'
' ;Start Add code Here
'
'  mov  DWORD PTR _ClsFunc2$[ebp], 12345678  ;return this number
'
' ;End Add code Here
'
'  mov     eax, DWORD PTR _ClsFunc1$[ebp]
'  mov     ecx, DWORD PTR _ClsFunc2$[ebp]
'  mov     DWORD PTR [eax], ecx
'
'  pop edi              ;restore registers
'  pop esi
'  pop ebx
'  mov esp, ebp         ;MOV/POP is much faster
'  pop ebp              ;on 486 and Pentium than Leave
'  ret 8                ; Return with 8 byte(long)
'#ASM_END

End Function

六、技术支持
网站 http://persistentrealities.com/vbfibre/ 有很多相关信息。

注意:该插件有个BUG,VB工程必须置于盘符根目录,文件名不能用中文(这点非常重要)。另外只有编译后汇编代码才能实现功能。不能用P-CODE编译。
相关插件和实例:


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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (20)
雪    币: 234
活跃值: (370)
能力值: ( LV9,RANK:530 )
在线值:
发帖
回帖
粉丝
2
没试过,直接用VB或者ASM好了
2006-5-18 12:57
0
雪    币: 222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
下载测试一下,不知道可不可以。
2006-5-18 14:51
0
雪    币: 212
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
强啊,VB终于可以吐气了
2006-5-19 17:35
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢!
(精简版好像用不了?)
2006-5-19 18:02
0
雪    币: 196
活跃值: (135)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
6
失败,实例返回值不正确,我自己也写了一段代码,返回值也不正确
应该是汇编代码没有被编译或执行造成的;设置均与一楼相同,
不知是否还有其它没有注意到的问题?
2006-5-19 18:53
0
雪    币: 1041
活跃值: (19)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
用了,还不错,谢谢楼主。
2006-5-20 00:08
0
雪    币: 208
活跃值: (376)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
8
2006-5-20 13:53
0
雪    币: 214
活跃值: (230)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
真变态,既然要用vb那还装什么b啊,搞个汇编进去,不伦不类!
2006-5-20 22:36
0
雪    币: 117
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我也失败,返回值为0,汇编代码未被执行。
2006-5-22 14:14
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
11
最初由 E=mc^2 发布
真变态,既然要用vb那还装什么b啊,搞个汇编进去,不伦不类!

也不能这样说,VB可以使用汇编的话起码可以增强VB的功能。若是你不喜欢在VB中用汇编你也可以不用。
2006-5-22 14:23
0
雪    币: 221
活跃值: (2311)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
没用成功!以前都是模拟汇编语句做法!
2006-5-22 21:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
shishi
2006-5-24 09:10
0
雪    币: 560
活跃值: (359)
能力值: ( LV13,RANK:1370 )
在线值:
发帖
回帖
粉丝
14
首先你要确定关联好ML.EXE,在链接旁边有个测试按钮测试一下,还有,直接在VB中运行是没有效果的,要编译成EXE文件后才可以实现,为了测试,你可以将设置中的DEBUG OPTIONS选项全部勾上,在编译的过程中就是会提示编译状态,而且在目录中做了纪录。
2006-5-24 11:39
0
雪    币: 560
活跃值: (359)
能力值: ( LV13,RANK:1370 )
在线值:
发帖
回帖
粉丝
15
发现另外一个VB插件,可以在VB内嵌C和ASM代码:
ThunderVB is an add-in for VB6. ThunderVB let's you embed Asm and C instructions directly in you VB source programs. Furthermore ThunVB let's you create a true StdCall Dlls. Moreover ThunVB can extend VB IDE to a basic Asm/C code editor. That means it can do syntax-highlighting of Asm/C keywords and supports intelli-sense for InlineAsm code as well. See the screenshots bellow. --- ThunderVB Development Team [ drkIIRaziel & Libor ] ---

http://www.pscode.com/vb/scripts/ShowCode.asp?lngWId=1&txtCodeId=62038
2006-5-24 12:20
0
雪    币: 333
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wan
16
感谢分享```
2006-5-24 12:51
0
雪    币: 6051
活跃值: (1441)
能力值: ( LV15,RANK:1473 )
在线值:
发帖
回帖
粉丝
17
收藏了啊,回去试试
2006-5-25 16:41
0
雪    币: 560
活跃值: (359)
能力值: ( LV13,RANK:1370 )
在线值:
发帖
回帖
粉丝
18
关于ThunderVB,最新的版本是1.01,可惜作者已经停止开发,它可以在VB中直接内嵌ASM代码和C代码,还可以对代码进行着色,插入代码时会有即时帮助提示。但有几个注意点:
1. 首先安装 MASM 和 VC++ 环境,因为需要调用到vc 编译器cl.exe 和 MASM 编译器 ml.exe(MASM6.1以上的都可以,VC++ 6.0以上),并在插件中设置好ml.exe和cl.exe 的路径。
2. 可以下载其例子,如果例子中有调用库文件Lib  #include ,需要修改好对应的路径,inc很lib路径。
3. 由于是混合编译,所以必须完全编译运行(不能解释运行) 才能看到效果,即不能用P-CODE编译。
4. 目前好象还不支持中文的VB,作者说主要是由于它自己看不懂中文,他也没有没有中文版的VB。即该插件只支持英文版VB6.0,而且要打上英文版补丁SP6。另外不能跟前面介绍的inlineASM插件混用。
5. 调用方式:
   ASM代码:建一个类,贴上代码,汇编语句都是以'#asm'开头,如:

  Public Function IsAsmOn() As Boolean
  '#asm'
  '#asm'  mov eax, -1
  '#asm'  retx         
  '#asm'
  End Function

   C代码:建一个类,贴上代码,汇编语句都是以'#c'开头,如:
   
   Public Function IsCOn() As Boolean
   '#c' int IsCOn()
   '#c' {
   '#c' return -1;
   '#c' }
   End Function

如果有兴趣可以到我的网络硬盘里下载或到官方网站下载:
http://free5.ys168.com/?langxang
http://sourceforge.net/projects/thundervb/
英文版VB和SP6补丁可以用电驴去搜索一下,挺多的,或者下英文版Microsoft Visual Studio 6.0,如果找不到可以联系我。
2006-5-28 11:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
楼主,你可否介绍的再详细点啊
2006-6-26 17:16
0
雪    币: 181
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
哎呀``~ 折腾了 一上午了 还是晕 再一次倒在VB面前
2006-7-6 13:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
VB内嵌汇编,好像很早了
2006-7-8 18:03
0
游客
登录 | 注册 方可回帖
返回
//