/// <summary> /// 指定したアドレスのメモリを sbyte 型の値として取得又は設定します。 /// </summary> /// <param name="address">読み書き対象の仮想アドレスを指定します。</param> public float this[int address] { get { float value = default(float); mem.ReadMemory((void *)address, &value, sizeof(float)); return(value); } set { mem.WriteMemory((void *)address, &value, sizeof(float)); } }
/// <summary> /// 指定したアドレスのメモリを sbyte 型の値として取得又は設定します。 /// </summary> /// <param name="address">読み書き対象の仮想アドレスを指定します。</param> public double this[int address] { get { double value = default(double); mem.ReadMemory((void *)address, &value, sizeof(double)); return(value); } set { mem.WriteMemory((void *)address, &value, sizeof(double)); } }
/// <summary> /// 指定したアドレスのメモリを sbyte 型の値として取得又は設定します。 /// </summary> /// <param name="address">読み書き対象の仮想アドレスを指定します。</param> public sbyte this[int address] { get { sbyte value = default(sbyte); mem.ReadMemory((void *)address, &value, sizeof(sbyte)); return(value); } set { mem.WriteMemory((void *)address, &value, sizeof(sbyte)); } }
/// <summary> /// 指定したアドレスのメモリを sbyte 型の値として取得又は設定します。 /// </summary> /// <param name="address">読み書き対象の仮想アドレスを指定します。</param> public ulong this[int address] { get { ulong value = default(ulong); mem.ReadMemory((void *)address, &value, sizeof(ulong)); return(value); } set { mem.WriteMemory((void *)address, &value, sizeof(ulong)); } }
/// <summary> /// 指定したアドレスのメモリを sbyte 型の値として取得又は設定します。 /// </summary> /// <param name="address">読み書き対象の仮想アドレスを指定します。</param> public ushort this[int address] { get { ushort value = default(ushort); mem.ReadMemory((void *)address, &value, sizeof(ushort)); return(value); } set { mem.WriteMemory((void *)address, &value, sizeof(ushort)); } }
/// <summary> /// プロセスの指定した仮想アドレスにある内容を読み取ります。 /// </summary> /// <param name="mem">読み取り元のプロセスへのメモリアクセスを提供する ProcessMemory を指定します。</param> /// <param name="addr">読み取り元の、指定したプロセス内に於ける仮想アドレスを指定します。</param> /// <returns>読み取った内容を返します。</returns> public static T Read(ProcessMemory mem, void *addr) { byte *p = stackalloc byte[size]; mem.ReadMemory(addr, p, size); return((T)Interop::Marshal.PtrToStructure((System.IntPtr)p, read_type)); }
public string ReadAnsiString() { const int SZ_BUFF = 0x100; byte * prem = _base; byte * pbuff = stackalloc byte[SZ_BUFF + 1]; char * pchar = stackalloc char[SZ_BUFF]; System.Text.StringBuilder build = new System.Text.StringBuilder(); pbuff[SZ_BUFF] = 0; // sentinel lock (dec){ dec.Reset(); int cByts, cChrs; do { // prem → pbuff mem.ReadMemory(prem, pbuff, SZ_BUFF); prem += SZ_BUFF; byte *scn = pbuff; while (*scn != 0) { scn++; // null 文字の位置迄 } cByts = (int)(scn - pbuff); // pbuff → pchar cChrs = dec.GetChars(pbuff, cByts, pchar, SZ_BUFF, false); // pchar → build build.Append(new string(pchar, 0, cChrs)); }while(cByts == SZ_BUFF); } return(build.ToString()); }