Уже все перепробовал, что только мог... После выполнения в CE пишет неверный адрес перехода... Я думаю проблема в том, что caveAddress = 0000000011223344 (пример), a addressFrom = 000007FED32A22DA (тоже). Помогите решить эту проблему! И при выполнении замененного кода возвращает тоже на неверный адрес. var valueon = new byte[] { 0x50, 0x48, 0xA1, 0xB8, 0x08, 0xCE, 0xD6, 0xFE, 0x07, 0x00, 0x00, 0x48, 0x8B, 0x00, 0x48, 0x8B, 0x40, 0x48, 0x48, 0x05, 0x90, 0x05, 0x00, 0x00, 0x48, 0x3B, 0x18, 0x74, 0x0C, 0x90, 0x90, 0x90, 0x90, 0xF3, 0x0F, 0x11, 0xBB, 0xEC, 0x07, 0x00, 0x00, 0x58 }; var valueoff = new byte[] { 0xF3, 0x0F, 0x11, 0xBB, 0xEC, 0x07, 0x00, 0x00, 0xF3, 0x0F, 0x10, 0x8B, 0xEC, 0x07, 0x00, 0x0 }; // Байты оригинальной команды var patern = new byte[] { 0xF3, 0x0F, 0x11, 0xBB, 0xEC, 0x07, 0x00, 0x00, 0xF3, 0x0F, 0x10, 0x8B, 0xEC, 0x07, 0x00, 0x00 }; MakeCave(valueon, valueoff, patern); Console.ReadKey();public static void MakeCave(byte[] valueon, byte[] valueoff, byte[] patern) { if (GHandle != IntPtr.Zero) { long caveAddress = (long)(Win32.VirtualAllocEx(GHandle, IntPtr.Zero, (IntPtr)(valueon.Length + 9), Win32.AllocationType.Commit, Win32.MemoryProtection.ExecuteReadWrite)); long addressFrom = FindWSignature(patern); if (addressFrom != -1) { Console.WriteLine(addressFrom.ToString("X")); //playSound("FIND.wav"); } else { Console.WriteLine("NOT FINDED"); //playSound("NOFIND.wav"); return; } long addressTo = addressFrom - caveAddress - valueon.Length; var buffer = new byte[valueoff.Length]; buffer[0] = 0xE9; var d = BitConverter.GetBytes(caveAddress - addressFrom); var f = BitConverter.GetBytes(caveAddress - addressFrom - d.Length); Array.Copy(f, 0, buffer, 1, f.Length); for (var i = d.Length+1; i < valueoff.Length; i++) { buffer[i] = 0x90; } var dummy = 0; var caveBuffer = new byte[valueon.Length + 9]; Array.Copy(valueon, caveBuffer, valueon.Length); caveBuffer[valueon.Length] = 0xE9; var retAddress = BitConverter.GetBytes(addressTo); Array.Copy(retAddress, 0, caveBuffer, valueon.Length + 1, retAddress.Length); Win32.WriteProcessMemory(GHandle, (long)caveAddress, caveBuffer, (int)caveBuffer.Length, ref dummy); var dummy1 = 0; Win32.WriteProcessMemory(GHandle, (long)addressFrom, buffer, (int)buffer.Length, ref dummy1); //VirtualFreeEx(handle, (IntPtr)0x09E90000, 0, FreeType.Release); Console.ReadKey(); } }