收藏 分享(赏)

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

上传人:hwpkd79526 文档编号:7403195 上传时间:2019-05-16 格式: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 中了。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报