中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 看雪学院专区 > Win32/Win64编程
在VB中使用内嵌汇编
作者:laomms 时间:2006-12-15 14:45 出处:pediy.com 责编:月夜寒箫
              摘要: 在VB中使用内嵌汇编
   看了软件加密技术内幕的最后关于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编译。
相关插件和实例:
所上传文件
vbinlineasm.rar (上传时间2006-05-27,11:36,100.4 KB,46 次点击)
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有