Visual Basic内嵌汇编语言解决方案.doc

上传人:hw****26 文档编号:3221015 上传时间:2019-05-26 格式:DOC 页数:2 大小:30KB
下载 相关 举报
Visual Basic内嵌汇编语言解决方案.doc_第1页
第1页 / 共2页
Visual Basic内嵌汇编语言解决方案.doc_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

1、VB 简单易用,但功能有时候受限制。VC、Delphi 都可以直接在程序中写汇编代码,可恼的是,VB 不行。我在网上也看过许多有关于 VB 嵌入汇编的方法,不过有些方法,过于复杂,而且也没相应的介绍。我这里提供一种方法,也许大家以后可能有用!基本思路:汇编代码,可以存在一个 byte 类型的数组中,然后通过某种手段,把系统控制权,转交给这段汇编代码,我们的汇编代码段,就得到了执行。但如何让这段汇编代码,获得系统的控制权限呢?查查 WIN API 手册,就可以知道有 CallWindowProc 这个函数。这个函数本是用于调用用户自己定义的窗口过程的,其原形如下:Function CallWin

2、dowProc Lib “user32“ Alias “CallWindowProcA“ (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 它有 5 个参数。lpPrevWnFunc 是一个 long 型,等于用户自己窗口过程的地址,其余 3 个都是窗口过程所必须的参数,详见 MSDN。我们只需要关心第一个参数:lpPrevWndFunc,窗口过程地址。如果,我们把自己的汇编代码地址,传进去会怎么样?当然

3、,CallWindowProc 就把这个地址,当成窗口过程地址,然后,调用这段汇编代码了。我们的汇编代码便得到执。当然,也得装摸做样的吧,将其余 4 个参数传进去,就传 4 个 0 算了,因为这 4 个参数,我们更本不用,但又是 CallWindowProc 必须的,不要忘了,我们传进去的 lpPrevWndFunc,并非真正的窗口过程地址,而是自己的汇编码地址。具体一点,比如,我们要嵌入一段什么也不干的汇编代码:Dim AsmCode() as byteredim AsmCode(8)生成机器代码AsmCode(0) = 参数入栈 push 0 push 0 push 0 push xxxx00afh;(当执行 call 时,自动执行)为了能让窗口过程执行结束后堆栈指针保持平衡,当然要执行相应的 pop 指令,第一个 pop eax 是把子程序返回的地址暂时保存在寄存器 eax 中,然后弹出 4 个不用的参数。接着把保存在 eax 中返回地址,压回堆栈。当执行 ret 时,就能正确返回到 CallWindowProc 中了。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。