private static IntPtr SysGetDllProcAddress(IntPtr libHandle, string symbol) { #if UNITY_STANDALONE_WIN return(PInvokes_Windows.GetProcAddress(libHandle, symbol)); #elif UNITY_STANDALONE_LINUX return(PInvokes_Linux.dlsym(libHandle, symbol)); #elif UNITY_STANDALONE_OSX return(PInvokes_Osx.dlsym(libHandle, symbol)); #endif }
private static IntPtr SysLoadDll(string filepath) { #if UNITY_STANDALONE_WIN return(PInvokes_Windows.LoadLibrary(filepath)); #elif UNITY_STANDALONE_LINUX return(PInvokes_Linux.dlopen(filepath, (int)Options.posixDlopenFlags)); #elif UNITY_STANDALONE_OSX return(PInvokes_Osx.dlopen(filepath, (int)Options.posixDlopenFlags)); #endif }
private static bool SysUnloadDll(IntPtr libHandle) { #if UNITY_STANDALONE_WIN return(PInvokes_Windows.FreeLibrary(libHandle)); #elif UNITY_STANDALONE_LINUX return(PInvokes_Linux.dlclose(libHandle) == 0); #elif UNITY_STANDALONE_OSX return(PInvokes_Osx.dlclose(libHandle) == 0); #endif }
/// <summary>Unprotect memory pages</summary> /// <param name="memory">The starting memory address</param> /// <param name="size">The length of memory block</param> /// internal static void UnprotectMemory(long memory, ulong size) { if (IsWindows) { var success = PInvokes_Windows.VirtualProtect(new IntPtr(memory), new UIntPtr(size), PInvokes_Windows.Protection.PAGE_EXECUTE_READWRITE, out var _); if (!success) { throw new System.ComponentModel.Win32Exception(); } } }
internal static void FlushCode(long memory, ulong size) { if (IsWindows) { var processHandle = PInvokes_Windows.GetCurrentProcess(); var success = PInvokes_Windows.FlushInstructionCache(processHandle, new IntPtr(memory), new UIntPtr(size)); if (!success) { throw new System.ComponentModel.Win32Exception(); } } }
private static IntPtr SysGetDllProcAddress(IntPtr libHandle, string symbol) { #if UNITY_STANDALONE_LINUX || UNITY_EDITOR_LINUX return(PInvokes_Linux.dlsym(libHandle, symbol)); #elif UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX return(PInvokes_Osx.dlsym(libHandle, symbol)); #elif UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN return(PInvokes_Windows.GetProcAddress(libHandle, symbol)); #else throw GetUnsupportedPlatformExcpetion(); #endif }
private static bool SysUnloadDll(IntPtr libHandle) { #if UNITY_STANDALONE_LINUX || UNITY_EDITOR_LINUX return(PInvokes_Linux.dlclose(libHandle) == 0); #elif UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX return(PInvokes_Osx.dlclose(libHandle) == 0); #elif UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN return(PInvokes_Windows.FreeLibrary(libHandle)); #else throw GetUnsupportedPlatformExcpetion(); #endif }
private static IntPtr SysLoadDll(string filepath) { #if UNITY_STANDALONE_LINUX || UNITY_EDITOR_LINUX return(PInvokes_Linux.dlopen(filepath, (int)Options.posixDlopenFlags)); #elif UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX return(PInvokes_Osx.dlopen(filepath, (int)Options.posixDlopenFlags)); #elif UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN return(PInvokes_Windows.LoadLibrary(filepath)); #else throw GetUnsupportedPlatformExcpetion(); #endif }