Advertisement
Guest User

Untitled

a guest
Feb 2nd, 2014
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 2.04 KB | None | 0 0
  1. module dllmain;
  2.  
  3. private import core.sys.windows.windows;
  4. private import core.sys.windows.dll;
  5. private import core.memory;
  6. private import std.stdio;
  7. private import IndentedStreamWriter;
  8. private import ScriptClasses;
  9. private import ScriptHooks;
  10. private import SigScans;
  11. private import Win32API;
  12. private import HeaderGenerator;
  13. private import Profiler;
  14. private import TestMod;
  15.  
  16. __gshared HINSTANCE g_hInst = NULL;
  17.  
  18. static void Init()
  19. {
  20.     try
  21.     {
  22.         while (!g_hInst) { }
  23.        
  24.         MODULEINFO moduleInfo = GetModuleInfo("TribesAscend.exe");
  25.        
  26.         ScriptName.NameArray = *cast(ScriptArray!(ScriptNameEntry*)**)(FindPattern(moduleInfo.lpBaseOfDll, moduleInfo.SizeOfImage, kSigNames, kMaskNames) + 2);
  27.         ScriptObject.SetObjectArray(*cast(ScriptArray!(ScriptObject)**)(FindPattern(moduleInfo.lpBaseOfDll, moduleInfo.SizeOfImage, kSigObjects, kMaskObjects) + 1));
  28.  
  29.         ScriptHooks.NativeArray = *cast(NativeFunction**)(FindPattern(moduleInfo.lpBaseOfDll, moduleInfo.SizeOfImage, kSigNatives, kMaskNatives) + 3);
  30.         ScriptHooks.CleanupStackPtr = cast(CleanupStack)FindPattern(moduleInfo.lpBaseOfDll, moduleInfo.SizeOfImage, kSigCleanupStack, kMaskCleanupStack);
  31.         ScriptHooks.CallFunctionPtr = cast(CallFunction)FindPattern(moduleInfo.lpBaseOfDll, moduleInfo.SizeOfImage, kSigCallFunction, kMaskCallFunction);
  32.        
  33.         ModInit();
  34.         //HeaderGenerator.Generate();
  35.     }
  36.     catch (Throwable e)
  37.     {
  38.         writef("ERROR occurred: %s:%u '%s'", e.file, e.line, e.msg);
  39.     }
  40. }
  41.  
  42. static void ThreadTrampoline()
  43. {
  44.     Init();
  45. }
  46.  
  47. extern(Windows) BOOL DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID pvReserved)
  48. {
  49.     switch (dwReason)
  50.     {
  51.         case DLL_PROCESS_ATTACH:
  52.             dll_process_attach(hInstance, false);
  53.             g_hInst = hInstance;
  54.             Thread th = new Thread(&ThreadTrampoline);
  55.             th.start();
  56.             break;
  57.         default:
  58.             return false;
  59.         case DLL_PROCESS_DETACH:
  60.             dll_process_detach(hInstance, true);
  61.             break;
  62.         case DLL_THREAD_ATTACH:
  63.             dll_thread_attach(true, true);
  64.             break;
  65.         case DLL_THREAD_DETACH:
  66.             dll_thread_detach(true, true);
  67.             break;
  68.     }
  69.     return true;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement