一个类的对象实例化后如何获取到内存的地址?  如果获取到了内存地址如何取地址里的值,然后再往地址里写入值?这个方法我主要是想实现: 在一软件里提供一接口,让另一个软件通过这个接口来取得一些数据并更改里面的一些数据。 软件是winfrm,不采用webservers。其实就是在一台电脑里运行这两个软件。 我想到一个办法就是定义一个接口,该接口通过COM去操作那个软件,但这样不好如何操作,又想直接操作内存去处理? 
不知那位高手有好的办法不?

解决方案 »

  1.   

    百度 共享内存 C# 或找 植物大战僵尸内存修改器源码 C# csdn下载里面也有,就是你想要的了
      

  2.   

    struct可以,reference object不是不可以,但是需要对clr hacking有很深入的理解,我想能做到的人除了微软,这个地球上不超过2位数。
      

  3.   

    物理地址是固定的 数值型的 (除了string 类型),他是有规律的,程序的运行基址+偏移地址 就是程序中的某个变量的地址了。
      

  4.   


    你知道一点,又不全知道,囫囵吞枣,不求甚解。你说的基本上是static variable,事实上还有在heap和stack上分配的。
      

  5.   

    班主说的极是。但楼主说的用到static variable这个即可,而且代码还是他自己开发的他自己控制就行了,又不是那个搞游戏外挂
      

  6.   

    调用Com接口,在C#会比较麻烦,最大的问题就是CLR静态类型在编译期就已经绑定了,需要一堆的反射+接口/类型的转换
    但用VB.Net就不一样了,由于VB中类型可以后期绑定,获取到某接口的COM实例后,可以直接调用接口方法,但带来的问题就是类型安全以及调试的困难(由于存在AppDomain跨域问题,有些异常是捕获不到的,单步调试时会直接跳出调试)Public Class ComProxyPublic Sub New(typeCLSID As Guid)
            If typeCLSID = Guid.Empty Then
                Throw New ArgumentNullException("CLSID")
            End If
            Try
                Dim type As Type
                type = System.Type.GetTypeFromCLSID(typeCLSID)
                Me.ComObject = Activator.CreateInstance(type)
                Me._clsID = typeCLSID
            Catch exp As Exception
                Throw New System.ComponentModel.Win32Exception("Failed to create instance by CLSID for COM: " & typeCLSID.ToString(), exp)
            End Try
        End Sub    Public Sub New(progID As String)
            If String.IsNullOrEmpty(progID) Then
                Throw New ArgumentNullException("progId")
            End If
            Try
                Me.ComObject = GetObject(, progID) 'VB方法  
                  'Me.ComObject = Marshal.GetActiveObject(progID)  'Net方法
                Me._progID = progID
            Catch exp As Exception
                Throw New System.ComponentModel.Win32Exception("Failed to create instance by ProgID for COM: " & progID, exp)
            End Try
        End Sub可以直接使用New ComProxy().COM接口方法()  会有编译警告
    但好处也是很明显的
      

  7.   

    你还是.NET 3.5的老皇历了。
      

  8.   

    自己实现个clr,取消托管堆,把C#弄成C