欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    vb动态加载dll的一个类实现vb动态加载dll并动态调用dll导出的函数的一个方便办法.docx

    • 资源ID:470270       资源大小:11.73KB        全文页数:6页
    • 资源格式: DOCX        下载积分:5
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要5
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    vb动态加载dll的一个类实现vb动态加载dll并动态调用dll导出的函数的一个方便办法.docx

    1、Vb动态加载d1.1.的一个类,实现vb动态加载d1.1.并动态调用d1.1.导出的函数的一个方便办法自从会vb用调用动态库函数以来,我一直在想:如何动态的调用d1.1.里的函数?网上有一个用Ca1.1.WindowProc函数的方法,不过我还是喜欢自己有个办法.今天工夫不负有心人,我终于把我心中一直想的办法给实现了,干脆就往自己的空间上贴吧专昔误的地方,希望可以得到有这方面的师傅给以指正,以求进步!对于系统api我没有尝试,如果调用约定相符,应该适用于对系统api的调用.我自己用c写个d1.1.,然后在vb里写了这个类.以下代码只是我简单的实现,主要的是看实现的道理.VC代码:I1.1.我把

    2、d1.1.文件名命名为:d1.1.#inc1.ude#inc1.ude#inc1.ude#inc1.ude,stdafx.h,BOO1.APIENTRYDI1.Mairi(HAND1.EhModu1.e,DWORDu1._reason_for_ca1.1.,1.PVOIDIpReserved)(returnTRUE;)externCBOO1._dec1.spec(d1.1.export)add(inta)MeSSageBoXA(NU1.1.,运行在d1.1.里成功,MBJDK);a=999;return1;)/vb代码:类代码:Private状态标志AsBoo1.eanPrivate模块句柄A

    3、s1.ongPrivate本地函数地址备份(0To4)AsBytePrivate被替换函数的地址As1.ongPub1.icFunction替换函数地址(模块名AsString,函数名AsStringz本地函数地址As1.ong)AsBoo1.eanIfO=本地函数地址Then替换函数地址=OExitFunctionEndIf被替换函数的地址=替换函数地址Dim函数地址As1.ongDimaAs1.ongDim跳转指令(OTo4)AsByte加载模块模块句柄=1.Oad1.ibrary(模块名)IfO模块句柄Then状态标志=1E1.se:替换函数地址二OExitFunctionEndIf检索

    4、函数地址函数地址=GetPrOCAddreSS(ByVa1.模块句柄,ByVaI函数名)If0函数地址Then状态标志=1E1.se替换函数地址=0ExitFunctionEndIf计算跳转地址a二函数地址-(本地函数地址+5)构造跳转地址跳转指令(0)=233a=WriteProcessMemory(-1.zByVa1.VarPtr(跳转指令Q),ByVaIVarPtr(八)z4,0)If0=aThen替换函数地址二0ExitFunctionEndIf先备份本地函数入口指令a=WriteProcessMemory(-1.zByVaIVarPtr(本地函数地址备份(0),ByVaI本地函数地址

    5、5,0)If0=aThen替换函数地址二0ExitFunctionEndIf写入跳转指令a=WriteProcessMemory(-1.zByVaI本地函数地址,ByVaIVarPtr(跳转指令(0),5,0)If0=aThen替换函数地址=0ExitFunction日se:状态标志二1替换函数地址=1EndIfEndFunctionPub1.icFunction还原函数地址()AsBoo1.eanIf0=状态标志Then还原函数地址=0ExitFunctionEndIfDimaAs1.onga=WriteProcessMemory(-1.zByVaI被替换函数的地址,ByVaIVarPtr

    6、本地函数地址备份(0),5,0)If0=aThen还原函数地址=0ExitFunctionE1.se:状态标志=0还原函数地址=1EndIfFree1.ibrary模块句柄EndFunctionPub1.icFunction当前状态()AsBoo1.ean当前状态=状态标志EndFunctionIiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiivvviiiivviivvvvivvvviiiiivviiiivvvivvvi,vb普通模块代码:读写内存的api函数Pub1.icDec1.areFunctionWriteProcessMemory1.ib,kerne1.3

    7、2,(ByVaIhProcessAs1.ong,ByVaI_IpBaseAcIcIressAsAnyzIpBufferAsAnyzByVaInSizeAs1.ong,IpNumberfBytesWrittenAs1.ong)As1.ong加载模块的api函数Pub1.icDec1.areFunction1.oad1.ibrary1.ib,kerne1.32,A1.ias1.oad1.ibraryA(ByVaIIp1.ibFiIeNameAsString)As1.ong检索模块里函数地址的api函数Pub1.icDec1.areFunctionGetProcAddress1.ib,kerne1.

    8、32,(ByVaIhModu1.eAs1.ong,ByVaIIpProcNameAsString)As1.ongIPub1.icDec1.areFunctionFree1.ibrary1.ib,kerne1.32,(ByVaIH1.ibModuIeAs1.ong)As1.ong节莫拟一个函数与d1.1.里,我们想调用函数类型和参数一致,用类将函数的地址替换Pub1.icFunction测试函数(参数As1.ong)AsBoo1.ean我们随便给返回0,因为这个指令将不会被程序执行到测试函数=0EndFunction,vb窗口模块代码:PrivateSubForm_1.oad()Dim模块名AsString,函数名AsString模块名二App.Path+d1.1.d1.1.,模块名现在可以自己定了,自由了!函数名=,addDimpAsBoo1.eanDimaaAsNewC1.ass1.P=aa.替换函数地址(模块名,函数名,AddreSSOf测试函数)IfpThen测试函数O将会弹出对话筐:运行在d1.1.里!aa.还原函数地址EndIfEndSub


    注意事项

    本文(vb动态加载dll的一个类实现vb动态加载dll并动态调用dll导出的函数的一个方便办法.docx)为本站会员(奥沙丽水)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!




    宁ICP备18001539号-1

    三一文库
    收起
    展开