aboutsummaryrefslogtreecommitdiff
path: root/LauncherInjector
diff options
context:
space:
mode:
authorp0358 <p0358@users.noreply.github.com>2021-12-31 22:25:40 +0100
committerGitHub <noreply@github.com>2021-12-31 22:25:40 +0100
commitdcba96bcc4b02639e859b0dcdc863391cb54684f (patch)
tree99d129460365774ae011d83b3765e7d9388c44a7 /LauncherInjector
parent4f7c3d02943a38941b79a638c5607b2b7f668956 (diff)
parentd658c0c8374f8491e062fabe031f79185169c414 (diff)
downloadNorthstarLauncher-dcba96bcc4b02639e859b0dcdc863391cb54684f.tar.gz
NorthstarLauncher-dcba96bcc4b02639e859b0dcdc863391cb54684f.zip
Merge pull request #1 from geniiii/p0358-refactor-fixes
Fixes, removal of fallback linear allocator
Diffstat (limited to 'LauncherInjector')
-rw-r--r--LauncherInjector/LauncherInjector.vcxproj2
-rw-r--r--LauncherInjector/LauncherInjector.vcxproj.filters6
-rw-r--r--LauncherInjector/main.cpp36
-rw-r--r--LauncherInjector/memalloc.cpp90
-rw-r--r--LauncherInjector/memalloc.h24
5 files changed, 14 insertions, 144 deletions
diff --git a/LauncherInjector/LauncherInjector.vcxproj b/LauncherInjector/LauncherInjector.vcxproj
index 289d66ae..8870c732 100644
--- a/LauncherInjector/LauncherInjector.vcxproj
+++ b/LauncherInjector/LauncherInjector.vcxproj
@@ -88,10 +88,8 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="main.cpp" />
- <ClCompile Include="memalloc.cpp" />
</ItemGroup>
<ItemGroup>
- <ClInclude Include="memalloc.h" />
<ClInclude Include="resource1.h" />
</ItemGroup>
<ItemGroup>
diff --git a/LauncherInjector/LauncherInjector.vcxproj.filters b/LauncherInjector/LauncherInjector.vcxproj.filters
index 2e935b08..87e25fa8 100644
--- a/LauncherInjector/LauncherInjector.vcxproj.filters
+++ b/LauncherInjector/LauncherInjector.vcxproj.filters
@@ -18,17 +18,11 @@
<ClCompile Include="main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="memalloc.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="resource1.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="memalloc.h">
- <Filter>Header Files</Filter>
- </ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="resources.rc">
diff --git a/LauncherInjector/main.cpp b/LauncherInjector/main.cpp
index 1eca067a..761f443e 100644
--- a/LauncherInjector/main.cpp
+++ b/LauncherInjector/main.cpp
@@ -18,7 +18,7 @@ HMODULE hHookModule;
HMODULE hTier0Module;
wchar_t exePath[4096];
-wchar_t buffer[8196];
+wchar_t buffer[8192];
DWORD GetProcessByName(std::wstring processName)
{
@@ -173,24 +173,18 @@ bool LoadNorthstar()
int main(int argc, char* argv[]) {
// checked to avoid starting origin, Northstar.dll will check for -dedicated as well on its own
- bool isDedicated = false;
- for (int i = 0; i < argc; i++)
- if (!strcmp(argv[i], "-dedicated"))
- isDedicated = true;
-
bool noOriginStartup = false;
for (int i = 0; i < argc; i++)
- if (!strcmp(argv[i], "-noOriginStartup"))
+ if (!strcmp(argv[i], "-noOriginStartup") || !strcmp(argv[i], "-dedicated"))
noOriginStartup = true;
- if (!isDedicated && !noOriginStartup)
+ if (!noOriginStartup)
{
EnsureOriginStarted();
}
{
-
- if (!GetExePathWide(exePath, 4096))
+ if (!GetExePathWide(exePath, sizeof(exePath)))
{
MessageBoxA(GetForegroundWindow(), "Failed getting game directory.\nThe game cannot continue and has to exit.", "Northstar Launcher Error", 0);
return 1;
@@ -198,6 +192,15 @@ int main(int argc, char* argv[]) {
PrependPath();
+ printf("[*] Loading tier0.dll\n");
+ swprintf_s(buffer, L"%s\\bin\\x64_retail\\tier0.dll", exePath);
+ hTier0Module = LoadLibraryExW(buffer, 0, LOAD_WITH_ALTERED_SEARCH_PATH);
+ if (!hTier0Module)
+ {
+ LibraryLoadError(GetLastError(), L"tier0.dll", buffer);
+ return 1;
+ }
+
bool loadNorthstar = ShouldLoadNorthstar(argc, argv);
if (loadNorthstar)
{
@@ -210,23 +213,12 @@ int main(int argc, char* argv[]) {
printf("[*] Loading launcher.dll\n");
swprintf_s(buffer, L"%s\\bin\\x64_retail\\launcher.dll", exePath);
- hLauncherModule = LoadLibraryExW(buffer, 0i64, 8u);
+ hLauncherModule = LoadLibraryExW(buffer, 0, LOAD_WITH_ALTERED_SEARCH_PATH);
if (!hLauncherModule)
{
LibraryLoadError(GetLastError(), L"launcher.dll", buffer);
return 1;
}
-
- printf("[*] Loading tier0.dll\n");
- // this makes zero sense given tier0.dll is already loaded via imports on launcher.dll, but we do it for full consistency with original launcher exe
- // and to also let load callbacks in Northstar work for tier0.dll
- swprintf_s(buffer, L"%s\\bin\\x64_retail\\tier0.dll", exePath);
- hTier0Module = LoadLibraryW(buffer);
- if (!hTier0Module)
- {
- LibraryLoadError(GetLastError(), L"tier0.dll", buffer);
- return 1;
- }
}
printf("[*] Launching the game...\n");
diff --git a/LauncherInjector/memalloc.cpp b/LauncherInjector/memalloc.cpp
deleted file mode 100644
index af334acf..00000000
--- a/LauncherInjector/memalloc.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
-#define WIN32_LEAN_AND_MEAN
-#include <Windows.h>
-#include "memalloc.h"
-#include <stdio.h>
-
-extern HMODULE hTier0Module;
-IMemAlloc** g_ppMemAllocSingleton;
-
-void LoadTier0Handle()
-{
- if (!hTier0Module) hTier0Module = GetModuleHandleA("tier0.dll");
- if (!hTier0Module) return;
-
- g_ppMemAllocSingleton = (IMemAlloc**)GetProcAddress(hTier0Module, "g_pMemAllocSingleton");
-}
-
-const int STATIC_ALLOC_SIZE = 16384;
-
-size_t g_iStaticAllocated = 0;
-void* g_pLastAllocated = nullptr;
-char pStaticAllocBuf[STATIC_ALLOC_SIZE];
-
-// they should never be used here, except in LibraryLoadError // haha not true
-
-void* malloc(size_t n)
-{
- //printf("NorthstarLauncher malloc: %llu\n", n);
- // allocate into static buffer
- if (g_iStaticAllocated + n <= STATIC_ALLOC_SIZE)
- {
- void* ret = pStaticAllocBuf + g_iStaticAllocated;
- g_iStaticAllocated += n;
- g_pLastAllocated = ret;
- return ret;
- }
- else
- {
- // try to fallback to g_pMemAllocSingleton
- if (!hTier0Module || !g_ppMemAllocSingleton) LoadTier0Handle();
- if (g_ppMemAllocSingleton && *g_ppMemAllocSingleton)
- return (*g_ppMemAllocSingleton)->m_vtable->Alloc(*g_ppMemAllocSingleton, n);
- else
- throw "Cannot allocate";
- }
-}
-
-void free(void* p)
-{
- //printf("NorthstarLauncher free: %p\n", p);
- // if it was allocated into the static buffer, just do nothing, safest way to deal with it
- if (p >= pStaticAllocBuf && p <= pStaticAllocBuf + STATIC_ALLOC_SIZE)
- return;
-
- if (g_ppMemAllocSingleton && *g_ppMemAllocSingleton)
- (*g_ppMemAllocSingleton)->m_vtable->Free(*g_ppMemAllocSingleton, p);
-}
-
-void* realloc(void* old_ptr, size_t size) {
- // it was allocated into the static buffer
- if (old_ptr >= pStaticAllocBuf && old_ptr <= pStaticAllocBuf + STATIC_ALLOC_SIZE)
- {
- if (g_pLastAllocated == old_ptr)
- {
- // nothing was allocated after this
- size_t old_size = g_iStaticAllocated - ((size_t)g_pLastAllocated - (size_t)pStaticAllocBuf);
- size_t diff = size - old_size;
- if (diff > 0)
- g_iStaticAllocated += diff;
- return old_ptr;
- }
- else
- {
- return malloc(size);
- }
- }
-
- if (g_ppMemAllocSingleton && *g_ppMemAllocSingleton)
- return (*g_ppMemAllocSingleton)->m_vtable->Realloc(*g_ppMemAllocSingleton, old_ptr, size);
- return nullptr;
-}
-
-void* operator new(size_t n)
-{
- return malloc(n);
-}
-
-void operator delete(void* p)
-{
- free(p);
-}
diff --git a/LauncherInjector/memalloc.h b/LauncherInjector/memalloc.h
deleted file mode 100644
index c983966c..00000000
--- a/LauncherInjector/memalloc.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#pragma once
-
-class IMemAlloc
-{
-public:
- struct VTable
- {
- void* unknown[1]; // alloc debug
- void* (*Alloc) (IMemAlloc* memAlloc, size_t nSize);
- void* unknown2[1]; // realloc debug
- void* (*Realloc)(IMemAlloc* memAlloc, void* pMem, size_t nSize);
- void* unknown3[1]; // free #1
- void (*Free) (IMemAlloc* memAlloc, void* pMem);
- void* unknown4[2]; // nullsubs, maybe CrtSetDbgFlag
- size_t(*GetSize) (IMemAlloc* memAlloc, void* pMem);
- void* unknown5[9]; // they all do literally nothing
- void (*DumpStats) (IMemAlloc* memAlloc);
- void (*DumpStatsFileBase) (IMemAlloc* memAlloc, const char* pchFileBase);
- void* unknown6[4];
- int (*heapchk) (IMemAlloc* memAlloc);
- };
-
- VTable* m_vtable;
-};