找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 6615|回复: 1

[原创] 特大发现?在VB2010的64位程序中照样使用VarPtr!

[复制链接]

858

主题

2638

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36138
发表于 2012-4-28 17:50:16 | 显示全部楼层 |阅读模式
先用VC2010制作一个DLL,核心代码只有四行:

  1. VB10PTR_EXTDLL_API ULONG64 VarPtr(PVOID p)
  2. {
  3.         return (ULONG64)p;
  4. }
复制代码
然后用VB2010写个测试:

  1. Public Class Form1
  2.     Private Declare Function VarPtr Lib "vbNetPtr.dll" Alias "#1" (ByRef int08 As Byte) As ULong
  3.     Private Declare Function VarPtr Lib "vbNetPtr.dll" Alias "#1" (ByRef int08 As SByte) As ULong
  4.     Private Declare Function VarPtr Lib "vbNetPtr.dll" Alias "#1" (ByRef int16 As UShort) As ULong
  5.     Private Declare Function VarPtr Lib "vbNetPtr.dll" Alias "#1" (ByRef int16 As Short) As ULong
  6.     Private Declare Function VarPtr Lib "vbNetPtr.dll" Alias "#1" (ByRef int32 As UInteger) As ULong
  7.     Private Declare Function VarPtr Lib "vbNetPtr.dll" Alias "#1" (ByRef int32 As Integer) As ULong
  8.     Private Declare Function VarPtr Lib "vbNetPtr.dll" Alias "#1" (ByRef int64 As ULong) As ULong
  9.     Private Declare Function VarPtr Lib "vbNetPtr.dll" Alias "#1" (ByRef int64 As Long) As ULong
  10.     Private Declare Sub RtlFillMemory Lib "kernel32.dll" (ByVal dst As ULong, ByVal len As ULong, ByVal chr As Byte)
  11.     Private Declare Sub RtlMoveMemory Lib "kernel32.dll" (ByVal dst As ULong, ByVal src As ULong, ByVal len As ULong)

  12.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  13.         Dim xx As Integer = &HFFFFFFFF        '这里要赋值占满空间
  14.         Dim yy As Integer = &H10191019        '这里要赋值占满空间
  15.         Dim xx_ptr As ULong = 0, yy_ptr As ULong = 0
  16.         MsgBox(Hex(xx), , "ffffffff")
  17.         xx_ptr = VarPtr(xx)
  18.         yy_ptr = VarPtr(yy)
  19.         RtlMoveMemory(xx_ptr, yy_ptr, 4)
  20.         MsgBox(Hex(xx), , "10191019")
  21.     End Sub

  22.     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  23.         Dim xx As ULong
  24.         Dim yy As ULong
  25.         Dim xx_ptr As ULong = 0, yy_ptr As ULong = 0
  26.         xx_ptr = VarPtr(xx)
  27.         yy_ptr = VarPtr(yy)
  28.         RtlFillMemory(xx_ptr, 8, &HFF)
  29.         RtlFillMemory(yy_ptr, 8, &HEE)
  30.         MsgBox(Hex(xx), , "FFFFFFFFFFFFFFFFF")
  31.         RtlMoveMemory(xx_ptr, yy_ptr, 8)
  32.         MsgBox(Hex(xx), , "EEEEEEEEEEEEEEEEE")
  33.     End Sub
  34. End Class
复制代码
发现完全达到了VB6里自带VarPtr的效果!
我对.NET不太了解,不知道这样子会不会出问题,各位试用一下。bin和src都在压缩包里了。

_vb10ptr.rar

97.84 KB, 下载次数: 5194

30

主题

693

回帖

0

精华

钻石会员

积分
2815
发表于 2015-4-16 10:22:24 | 显示全部楼层
谢谢大侠分享{:soso_e113:}
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表