怎样访问内存,读 和 写???
比如:
      将内存全部保存在硬盘上-----读
      再将硬盘上的数据恢复到内存中--写

解决方案 »

  1.   

    建议:多看其它网站:(只列出前十大最佳)
    http://www.zarr.net
    http://www.vbhelp.bet
    http://www.21code.com
    http://www.vbthunder.com
    http://www.easthot.net
    http://www.freevbcode.com
    http://www.vbaccelerator.com
    http://jinesc.6600.org
    http://www.codeguru.com
    http://www.vbcode.com
      

  2.   

    'strS1,strS2 为内存中内容
    Open "C:\test.txt" For Output As #1
        Print #1, strS1
        Print #1, strS2    
    Close #1
    'TextLine为内存变量
    Open "C:\test.txt" For Output As #1
        Line Input #1, TextLine
        Debug.Print TextLine   
    Close #1
      

  3.   

    'strS1,strS2 为内存中内容
    Open "C:\test.txt" For Output As #1 写到硬盘文件中
        Print #1, strS1
        Print #1, strS2    
    Close #1
    'TextLine为内存变量
    Open "C:\test.txt" For Input As #1  读入内存
        Line Input #1, TextLine
        Debug.Print TextLine   
    Close #1
      

  4.   

    你想得好哦,那windows不就只有下课了,
    系统的东西,岂容你乱写!
      

  5.   

    不是吧!我只是想将内存保存到硬盘,当发生意外时再恢复,XP的休眠功能
    不就和这个差不多!兄弟,要知道:MS能做到的,我们也同样能做到!
      

  6.   

    利用汇编本来就能很简单的让程序运行在最高权限嘛,好像一个伪指令....
    再说了,你用过金山游侠吗,它不也不内存编辑功能吗?但它也是运行在Win32下的!!!
      

  7.   

    对内存编辑,需要取得编辑权限
    指导进程id
    用openprocess函数打开次进程
    就有了读写权限
    大概是这样
      

  8.   

    使用 Visual Basic 通过 32 位 地址访问内存    wxj_lake(翻译)  
      http://www.csdn.net/develop/Read_Article.asp?Id=12939使用 Visual Basic 通过 32 位 地址访问内存2001年7月6日马尼拉,菲律宾作者:Chris Vega [[email protected]]  当我们谈论“真的”指针和内存地址,我们大都会想到 Visual Basic 的局限性,比如,由于 VB 没有作为变量声明的指针数据类型,它不能直接访问内存。当某些场合需要一个变量的“地址”而不是它的值的时候,这一点混淆就显得特别明显。例如,那个变量位于内存(当前进程、其它进程或者动态链接库的虚拟空间)中的何处。  是的,VB 确实“没有”指针变量,但是你是否曾试过将一个正规的 VB 数据类型转变为一个指针?你是否认为这是不可能的?好吧,还是再想一下,因为在 Visual Basic 中(从发行版本5开始),Microsoft 提供了一系列便利的函数以将你的正规变量转换为指针,它们是:1] VarPtr - 返回一个变量或者数组元素的地址
       StrPtr - 返回字符串的地址  Visual Basic 中除字符串以外的变量,都位于它的内存位置上,你可以通过调用 VarPtr 函数获取这个变量的地址。字符串实际上是作为 BSTR 储存的,这是一个指向“字符数组的指针”的指针,这样你就需要 StrPtr 以得到“字符数组的指针”的地址,而不是用 VarPtr 获得 BSTR 的地址。范例:
     Dim ptrMyPointer As Long
     Dim intMyInteger As Integer
     Dim strMyString As String * 25 ' 这就是一个调用
     ptrMyPointer = VarPtr(intMyInteger)
     ' 将内存中 intMyInteger 这个变量的32位地址赋予 ptrMyPointer strMyString = "变量的地址:" & Hex(ptrMyPointer)
     MsgBox strMyString
     ' 这是另一个调用
     ptrMyPointer = StrPtr(strMyString)
     ' 给出字符数组首元素的地址,例如,字符串的第一个字母。
    2] VarPtrArray - 返回变量数组的地址
       VarPtrStringArray - 返回字符传数组的地址  Visual Basic 中数组被包存在 SAFEARRAY 结构中,你需要使用 VarPtrArray 函数以获取数组的地址,但是在使用该函数之前,你必须手工把它从 msvbvm50.dll 中声明到 VB 程序中。范例: ' 对于 VB 5
     ' ========
     Declare Function VarPtrArray Lib "msvbvm50.dll" Alias "VarPtr" (Var() as Any) As Long ' 对于 VB 6
     ' ========
     Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (Var() as Any) As Long  ' 调用 Dim lngSafeArrayAddress As Long
     Dim lngArrayOfLongs(6) As Long
     Dim i As Long Randomize
     For i = 0 to 6
      lngArrayOfLongs = Int(Rnd * &HFFFF)
     Next lngSafeArrayAddress = VarPtrArray(lngArrayOfLongs())  ' 返回数组 lngArrayOfLongs 的安全地址,s of an Array , you
     ' 你可以将这些地址用于快速排序或其它用途。
      

  9.   

    事实上,VarPtrStringArray 更难以用于你的程序中,因为你需要创建一个类型库并手工将该类型库引用到 VB 程序中。要做一个类型库,你需要一个 MIDL 编译器,它是一个用于将 *.odl 文件编译成类型库的命令行工具。
      对于 VB5,创建一个文本文件并且保存为 VB5StrPtr.odl,加入以下内容:----------开始剪切--------------------------------------------------
    #define RTCALL _stdcall
    [uuid(6E814F00-7439-11D2-98D2-00C04FAD90E7),lcid (0), version(5.0), helpstring("VarPtrStringArray Support for VB5")]
    library PtrLib
    {
     importlib ("stdole2.tlb");
     [dllname("msvbvm50.dll")]
     module ArrayPtr
       {
        [entry("VarPtr")]
        long RTCALL VarPtrStringArray([in] SAFEARRAY (BSTR) *Ptr);
       }

    ----------结束剪切-------------------------------------------------  用以下命令编译: MIDL /t VB5StrPtr.odl  对于 VB6,创建一个文本文件并且保存为 VB6StrPtr.odl,加入以下内容:-----------开始剪切--------------------------------------------------
    #define RTCALL _stdcall
    [uuid(C6799410-4431-11d2-A7F1-00A0C91110C3),lcid (0), version(6.0), helpstring("VarPtrStringArray Support for VB6")]
    library PtrLib
    {
     importlib ("stdole2.tlb");
     [dllname("msvbvm60.dll")]
     module ArrayPtr
       {
        [entry("VarPtr")]
        long RTCALL VarPtrStringArray([in] SAFEARRAY (BSTR) *Ptr);
       }

    ----------结束剪切-------------------------------------------------  用以下命令编译: MIDL /t VB6StrPtr.odl
      现在,你有了类型库,将该类型库引用到 VB 程序中,然后你可以用以下方式获取字符串数组:Dim MyArrayOfStrings(3) As String
    Dim AddressOfArray As Long
    MyArrayOfStrings(0)="Chris"
    MyArrayOfStrings(1)="Vega"
    MyArrayOfStrings(2)="[email protected]"' 调用
    AddressOfArray = VarPtrStringArray ( MyArrayOfStrings() ) ' 给出数组首元素的地址,而且是该首元素的第一个字符,
    ' 例如,这里是字符“C”在内存中的地址
    ' *** 怎样?你没有 MIDL 编译器?或者你不愿麻烦自己创建类型库并手工引用?
    ' 这里有一种足够容易的简单方法。
    ' 因为 StrPtr 函数具有获得字符串地址的能力,而字符串数组的元素全部都是字符串,
    ' 所以你应该清楚了,你可以对数组的首元素进行这个调用AddressOfArray = StrPtr ( MyArrayOfStrings(0) )' 返回更上述方法完全相同的结果 3] ObjPtr - 返回一个对象的地址  面向对象编程由众多对象组成,而这些对象和它的众多属性一起保存在内存中,作为一种结构化的布局。你需要调用 ObjPtr 函数来获取它的位置。范例:
     ' 你要知道 Form1 处于内存何处,本方法告诉你它在线程中的地址 Dim objMyObject As New Form1
     MsgBox "Form1 位于:" & Hex( ObjPtr( objMyObject ) )   好,到此为止你一定在想:无论如何,怎么才能把这些地址变成实际有用的东西呢?其实如果你这样想答案就很清楚了:地址是一个内存中的位置,而你的变量中保存的就是一个内存中的位置,并且有它本身在内存中的位置。搞糊涂了?我们让它简单一点,你可以简单的认为这个地址是保存数据的位置,数据是可读写的,而你需要通过这个地址来读写它。唔,Visual Basic 能够做这种事情吗?  不能,如果你只是简单的考虑 Visual Basic 的能力的话,但是你的程序可以使用 API 函数。我现在谈到的 API 是从 KERNEL32.DLL 输出的运行库,名为 RtlMoveMemory 和 RtlCopyMemory。  它太吸引人了。首先我们已经找到了通过把变量转变为指针来得到内存地址的方法,现在我们又有了读写这些地址所指内容的方法。但是只要将这两个声明中的任一个加入你的程序中,而不是全部,因为它们的功能是一样的。我建议使用第二个,因为它被所有的 Windows 系统支持,而 RtlCopyMemory 则不然。
      

  10.   

    用全局变量不就可以了吗??还读内存干什么?在用hook监视一下应该可以实现你要实现的功能
      

  11.   


    用例:通过内存为变量赋值: Dim ptrVariable As Long
     Dim xCounter As Long ptrVariable = VarPtr(ptrVariable)
     WriteMem ptrVariable, DefineWord, &HFFFF 
     ' 与 ptrVariable = &HFFFF 等价
    读内存的内容,使用: ptrVariable = ReadMem(ptrVariable, DefineWord)
      现在我们能够获得指针并访问它们了。但是如果你一步步跟着以上步骤看下来,你可能奇怪一条原本的 Visual Basic 赋值操作比这里介绍的直接内存赋值操作快得多。然而本文旨在指出可以使用 Visual Basic 访问内存,而这一点的主要意义不仅在于读取和分析变量,接下来,你可以通过获得内存地址简单地处理运行的 DLL。同时利用 modMemory.bas 和 PE (Portable Executable) 文件格式的知识,你可以分析 DLL 主体,看看它们是如何处理的。最好的是,可以获取它所有输出函数的列表;差点忘记,可以把它们 spy 出来或者干脆获取函数体的副本进行反汇编,比低级语言访问更多的内容,这也是 C 语言被称为工业标准的原因;现在你可以书写跟 C 表现相同的 Visual Basic 程序,祝你好运!