如题

解决方案 »

  1.   


    using System.Runtime.InteropServices;
    using System.Text;
    public class Function
    {

    public static byte PtrToByte( int Ptr )
    {
    byte b = Marshal.ReadByte( ( IntPtr ) Ptr );

    return b;
    }

    public static char PtrToChar( int Ptr )
    {
    byte b = Marshal.ReadByte( ( IntPtr ) Ptr );

    return ( char ) b;
    }

    public static short PtrToShort( int Ptr )
    {
    short b = Marshal.ReadInt16( ( IntPtr ) Ptr );

    return b;
    }

    public static ushort PtrToUShort( int Ptr )
    {
    ushort b = ( ushort ) Marshal.ReadInt16( ( IntPtr ) Ptr );

    return b;
    }

    public static int PtrToInt( int Ptr )
    {
    int b = Marshal.ReadInt32( ( IntPtr ) Ptr );

    return b;
    }

    public static uint PtrToUInt( int Ptr )
    {
    uint b = ( uint ) Marshal.ReadInt32( ( IntPtr ) Ptr );

    return b;
    }

    public static long PtrToLong( int Ptr )
    {
    long b = Marshal.ReadInt64( ( IntPtr ) Ptr );

    return b;
    }

    public static ulong PtrToULong( int Ptr )
    {
    ulong b = ( ulong ) Marshal.ReadInt64( ( IntPtr ) Ptr );

    return b;
    }


    // Convert an ip address stored an address to equivalent string value
    public static string GetPtrToIpAddr(int intPtr, int varlen)
    {
    int i = 0;
    StringBuilder sb = new StringBuilder(0,varlen*4);
    byte[] byx = new byte[varlen];

    // ip address cann't have zero value
    // ip address cann't have zero length
    if( ( intPtr == 0 ) || ( varlen == 0 ) ) return "";
    Marshal.Copy( ( IntPtr ) intPtr , byx , 0 , varlen );
    for( i = 0; i < varlen - 1; i ++ )
    {
    sb.Append(byx[i]);
    sb.Append('.');

    }
    sb.Append(byx[varlen - 1]);

    return sb.ToString();

    }

    }-----------------------object *p;
    p=内存地址;
    Console.Write("value={0}",*p);
      

  2.   

    http://community.csdn.net/Expert/topic/4281/4281742.xml?temp=.5251734里面又个读写内存的类
      

  3.   

    private static void ReadCallBack(System.IntPtr  pPacketBuffer,UInt16 nPacketSize)
    {
    byte[] buffer=new byte[nPacketSize];
                
    Marshal.Copy(pPacketBuffer,buffer,0,nPacketSize); filestream.Write(buffer,0,nPacketSize); //写入文件
    }
      

  4.   


    ReadProcessMemory
    WriteProcessMemory
      

  5.   

    IntPtr 对内存绝对位置访问
      

  6.   

    C# 提供2种指针,一种是managed pointer,另一种是unsafe pointer。
    对于managed pointer,并不具备指针算法,后一种可以。
      

  7.   

    managed pointer? 只要是pointer 就是 unsafe code.
      

  8.   

    System.LocalDataStoreSlotThread.AllocateDataSlot()