コード例 #1
0
ファイル: KernelBlackMagic.cs プロジェクト: morelli690/RECC
 /// <summary>
 /// Записать текст в память
 /// </summary>
 /// <param name="Address">Адрес записи</param>
 /// <param name="Text">Текст который будет записан в память</param>
 public static bool WriteString(ulong Address, string Text)
 {
     if (Address > ProtectedLowAddressZone)
     {
         fixed(char *ptr = Text)  //Фиксируем текст и записываем куда надо
         return(InternalMagic.ReadWriteBytes(Address, (void *)(ptr), (uint)Text.Length, false));
     }
     return(false);
 }
コード例 #2
0
ファイル: KernelBlackMagic.cs プロジェクト: morelli690/RECC
 /// <summary>
 /// Записать число в память
 /// В среднем занимает 1,250326 тика для uint
 /// </summary>
 /// <typeparam name="T">Число</typeparam>
 /// <param name="Address">Адрес записи</param>
 /// <param name="Value">Записываемое число</param>
 public static bool Write <T>(ulong Address, T Value)
 {
     if (Address > ProtectedLowAddressZone)
     {
         TypedReference tRef = __makeref(Value); //Грязные хаками получаем адрес 'T Value'
         return(InternalMagic.ReadWriteBytes(Address, (void *)*(UInt64 *)(&tRef), (uint)Marshal.SizeOf(typeof(T)), false));
     }
     return(false);
 }
コード例 #3
0
ファイル: KernelBlackMagic.cs プロジェクト: morelli690/RECC
 /// <summary>
 /// Записать массив байт
 /// </summary>
 /// <param name="Address">Адрес записи</param>
 /// <param name="Bytes">Массив байт который буем записывать</param>
 public static bool WriteBytes(ulong Address, byte[] Bytes)
 {
     if ((Address > ProtectedLowAddressZone) || (Bytes != null))
     {
         fixed(byte *ptr = Bytes)  //Фиксируем массив, и драйвер все сам прочитает
         return(InternalMagic.ReadWriteBytes(Address, ptr, (uint)Bytes.Length, false));
     }
     return(false);
 }
コード例 #4
0
ファイル: KernelBlackMagic.cs プロジェクト: morelli690/RECC
 /// <summary>
 /// Прочитать в уже инициализированный массив байт
 /// </summary>
 /// <param name="Address">Адрес чтения</param>
 /// <param name="Bytes">Инициализированный массив байт</param>
 public static bool ReadBytes(ulong Address, ref byte[] Bytes)
 {
     if ((Address > ProtectedLowAddressZone) || (Bytes != null))
     {
         fixed(byte *ptr = Bytes)  //Фиксируем массив, и после драйвер все пихнет в него сам
         return(InternalMagic.ReadWriteBytes(Address, ptr, (uint)Bytes.Length, true));
     }
     return(false);
 }
コード例 #5
0
ファイル: KernelBlackMagic.cs プロジェクト: morelli690/RECC
 /// <summary>
 /// Записать число в память
 /// Самый молниеносный способ!
 /// В среднем занимает 1,079411 тика для uint
 /// </summary>
 /// <param name="Address">Адрес записи</param>
 /// <param name="ValueAddress">Адрес записываемого числа</param>
 /// <param name="ValueSize">Размер записываемого числа</param>
 public static bool Write(ulong Address, void *ValueAddress, uint ValueSize)
 {
     if (Address > ProtectedLowAddressZone)
     {
         return(InternalMagic.ReadWriteBytes(Address, ValueAddress, ValueSize, false));
     }
     else
     {
         return(false);
     }
 }
コード例 #6
0
ファイル: KernelBlackMagic.cs プロジェクト: morelli690/RECC
        //Прочитать строку по нужному адрессу и в нужной кодировке с ограничением по длине
        private static string ReadStringInternal(Encoding Encoding, ulong Address, ushort MaxLenght)
        {
            byte[] Array = new byte[MaxLenght];
            fixed(byte *ptr = Array)
            {
                if (InternalMagic.ReadWriteBytes(Address, ptr, (uint)Array.Length, true))
                {
                    //Сквозь массив ищем null терминатор строки
                    for (int i = 0; i < MaxLenght; i++)
                    {
                        if (*(ptr + i) == '\0') //Ищем null терминатор
                        {
                            return(Encoding.GetString(Array, 0, i));
                        }
                    }

                    //Окей, мы не нашли конец строке, вернем все!
                    return(Encoding.GetString(Array));
                }
                return(""); //Ошибка!
            }
        }