Skip to content

Commit a6c494a

Browse files
committed
#39 Add ARM and ARM64 configuration.
1 parent 2aa3cf9 commit a6c494a

16 files changed

Lines changed: 684 additions & 171 deletions

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,4 +338,5 @@ ASALocalRun/
338338

339339
# BeatPulse healthcheck temp database
340340
healthchecksdb
341-
/test/a.dll
341+
/test/a.dll
342+
/MemoryModule/DebugDll

MemoryModule/Loader.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
#include "stdafx.h"
22
#include <cmath>
33

4+
#ifdef _USRDLL
5+
#if (defined(_WIN64) || defined(_M_ARM))
6+
#pragma comment(linker,"/export:LdrUnloadDllMemoryAndExitThread")
7+
#pragma comment(linker,"/export:FreeLibraryMemoryAndExitThread=LdrUnloadDllMemoryAndExitThread")
8+
#else
9+
#pragma comment(linker,"/export:LdrUnloadDllMemoryAndExitThread=_LdrUnloadDllMemoryAndExitThread@8")
10+
#pragma comment(linker,"/export:FreeLibraryMemoryAndExitThread=_LdrUnloadDllMemoryAndExitThread@8")
11+
#endif
12+
#endif
13+
414
NTSTATUS NTAPI LdrMapDllMemory(
515
_In_ HMEMORYMODULE ViewBase,
616
_In_ DWORD dwFlags,

MemoryModule/Loader.h

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -61,16 +61,6 @@ NTSTATUS NTAPI LdrLoadDllMemoryExW(
6161
//Unload modules previously loaded from memory
6262
NTSTATUS NTAPI LdrUnloadDllMemory(_In_ HMEMORYMODULE BaseAddress);
6363

64-
#if (!defined(_USRDLL) && defined(_MEMORY_MODULE))
65-
#ifdef _WIN64
66-
#pragma comment(linker,"/export:LdrUnloadDllMemoryAndExitThread")
67-
#pragma comment(linker,"/export:FreeLibraryMemoryAndExitThread=LdrUnloadDllMemoryAndExitThread")
68-
#else
69-
#pragma comment(linker,"/export:LdrUnloadDllMemoryAndExitThread=_LdrUnloadDllMemoryAndExitThread@8")
70-
#pragma comment(linker,"/export:FreeLibraryMemoryAndExitThread=_LdrUnloadDllMemoryAndExitThread@8")
71-
#endif
72-
#endif
73-
7464
extern "C" {
7565
__declspec(noreturn) VOID NTAPI LdrUnloadDllMemoryAndExitThread(
7666
_In_ HMEMORYMODULE BaseAddress,

MemoryModule/MemoryModule.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
#include "stdafx.h"
22

3-
#ifdef _WIN64
3+
#if defined(_M_ARM64)
4+
#define HOST_MACHINE IMAGE_FILE_MACHINE_ARM64
5+
#elif defined(_M_ARM)
6+
#define HOST_MACHINE IMAGE_FILE_MACHINE_ARM
7+
#elif defined(_WIN64)
48
#define HOST_MACHINE IMAGE_FILE_MACHINE_AMD64
59
#else
610
#define HOST_MACHINE IMAGE_FILE_MACHINE_I386

MemoryModule/MemoryModule.vcxproj

Lines changed: 322 additions & 0 deletions
Large diffs are not rendered by default.

MemoryModule/MmpGlobalData.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ typedef enum class _WINDOWS_VERSION :BYTE {
100100
#define MEMORY_MODULE_GET_MINOR_VERSION(MinorVersion) (~0x8000&(MinorVersion))
101101

102102
#define MEMORY_MODULE_MAJOR_VERSION 2
103-
#define MEMORY_MODULE_MINOR_VERSION 0
103+
#define MEMORY_MODULE_MINOR_VERSION MEMORY_MODULE_MAKE_PREVIEW(1)
104104

105105
typedef struct _MMP_GLOBAL_DATA {
106106

MemoryModule/MmpTls.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ DWORD NTAPI MmpUserThreadStart(LPVOID lpThreadParameter) {
231231
return Context.ThreadStartRoutine(Context.ThreadParameter);
232232
}
233233

234-
#ifdef _WIN64
234+
#if (defined(_WIN64) || defined(_M_ARM))
235235
VOID NTAPI HookRtlUserThreadStart(
236236
_In_ PTHREAD_START_ROUTINE Function,
237237
_In_ PVOID Parameter) {
@@ -256,7 +256,7 @@ HookRtlUserThreadStart(
256256

257257
// Context.ThreadParameter = Parameter;
258258
mov dword ptr ds : [esp + 4] , ebx;
259-
259+
260260
mov eax, MmpUserThreadStart;
261261
mov ebx, esp;
262262

MemoryModule/ReflectiveLoader.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#ifdef _USRDLL
1+
#if !(defined(_M_ARM) || defined(_M_ARM64) || defined(_USRDLL))
22

33
//===============================================================================================//
44
// Copyright (c) 2012, Stephen Fewer of Harmony Security (www.harmonysecurity.com)

MemoryModulePP.sln

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
3-
# Visual Studio Version 16
4-
VisualStudioVersion = 16.0.29709.97
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.7.34202.233
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MemoryModule", "MemoryModule\MemoryModule.vcxproj", "{5B1F46DB-036E-4A50-AF5F-F5D6584D42C6}"
77
EndProject
@@ -11,34 +11,62 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "a", "a\a.vcxproj", "{DA79C6
1111
EndProject
1212
Global
1313
GlobalSection(SolutionConfigurationPlatforms) = preSolution
14+
Debug|ARM = Debug|ARM
15+
Debug|ARM64 = Debug|ARM64
1416
Debug|x64 = Debug|x64
1517
Debug|x86 = Debug|x86
18+
Release|ARM = Release|ARM
19+
Release|ARM64 = Release|ARM64
1620
Release|x64 = Release|x64
1721
Release|x86 = Release|x86
1822
EndGlobalSection
1923
GlobalSection(ProjectConfigurationPlatforms) = postSolution
24+
{5B1F46DB-036E-4A50-AF5F-F5D6584D42C6}.Debug|ARM.ActiveCfg = Debug|ARM
25+
{5B1F46DB-036E-4A50-AF5F-F5D6584D42C6}.Debug|ARM.Build.0 = Debug|ARM
26+
{5B1F46DB-036E-4A50-AF5F-F5D6584D42C6}.Debug|ARM64.ActiveCfg = Debug|ARM64
27+
{5B1F46DB-036E-4A50-AF5F-F5D6584D42C6}.Debug|ARM64.Build.0 = Debug|ARM64
2028
{5B1F46DB-036E-4A50-AF5F-F5D6584D42C6}.Debug|x64.ActiveCfg = Debug|x64
2129
{5B1F46DB-036E-4A50-AF5F-F5D6584D42C6}.Debug|x64.Build.0 = Debug|x64
2230
{5B1F46DB-036E-4A50-AF5F-F5D6584D42C6}.Debug|x86.ActiveCfg = Debug|Win32
2331
{5B1F46DB-036E-4A50-AF5F-F5D6584D42C6}.Debug|x86.Build.0 = Debug|Win32
32+
{5B1F46DB-036E-4A50-AF5F-F5D6584D42C6}.Release|ARM.ActiveCfg = Release|ARM
33+
{5B1F46DB-036E-4A50-AF5F-F5D6584D42C6}.Release|ARM.Build.0 = Release|ARM
34+
{5B1F46DB-036E-4A50-AF5F-F5D6584D42C6}.Release|ARM64.ActiveCfg = Release|ARM64
35+
{5B1F46DB-036E-4A50-AF5F-F5D6584D42C6}.Release|ARM64.Build.0 = Release|ARM64
2436
{5B1F46DB-036E-4A50-AF5F-F5D6584D42C6}.Release|x64.ActiveCfg = Release|x64
2537
{5B1F46DB-036E-4A50-AF5F-F5D6584D42C6}.Release|x64.Build.0 = Release|x64
2638
{5B1F46DB-036E-4A50-AF5F-F5D6584D42C6}.Release|x86.ActiveCfg = Release|Win32
2739
{5B1F46DB-036E-4A50-AF5F-F5D6584D42C6}.Release|x86.Build.0 = Release|Win32
40+
{5B3131BA-178A-4A28-BD54-315A45C97ED1}.Debug|ARM.ActiveCfg = Debug|ARM
41+
{5B3131BA-178A-4A28-BD54-315A45C97ED1}.Debug|ARM.Build.0 = Debug|ARM
42+
{5B3131BA-178A-4A28-BD54-315A45C97ED1}.Debug|ARM64.ActiveCfg = Debug|ARM64
43+
{5B3131BA-178A-4A28-BD54-315A45C97ED1}.Debug|ARM64.Build.0 = Debug|ARM64
2844
{5B3131BA-178A-4A28-BD54-315A45C97ED1}.Debug|x64.ActiveCfg = Debug|x64
2945
{5B3131BA-178A-4A28-BD54-315A45C97ED1}.Debug|x64.Build.0 = Debug|x64
3046
{5B3131BA-178A-4A28-BD54-315A45C97ED1}.Debug|x64.Deploy.0 = Debug|x64
3147
{5B3131BA-178A-4A28-BD54-315A45C97ED1}.Debug|x86.ActiveCfg = Debug|Win32
3248
{5B3131BA-178A-4A28-BD54-315A45C97ED1}.Debug|x86.Build.0 = Debug|Win32
3349
{5B3131BA-178A-4A28-BD54-315A45C97ED1}.Debug|x86.Deploy.0 = Debug|Win32
50+
{5B3131BA-178A-4A28-BD54-315A45C97ED1}.Release|ARM.ActiveCfg = Release|ARM
51+
{5B3131BA-178A-4A28-BD54-315A45C97ED1}.Release|ARM.Build.0 = Release|ARM
52+
{5B3131BA-178A-4A28-BD54-315A45C97ED1}.Release|ARM64.ActiveCfg = Release|ARM64
53+
{5B3131BA-178A-4A28-BD54-315A45C97ED1}.Release|ARM64.Build.0 = Release|ARM64
3454
{5B3131BA-178A-4A28-BD54-315A45C97ED1}.Release|x64.ActiveCfg = Release|x64
3555
{5B3131BA-178A-4A28-BD54-315A45C97ED1}.Release|x64.Build.0 = Release|x64
3656
{5B3131BA-178A-4A28-BD54-315A45C97ED1}.Release|x86.ActiveCfg = Release|Win32
3757
{5B3131BA-178A-4A28-BD54-315A45C97ED1}.Release|x86.Build.0 = Release|Win32
58+
{DA79C619-BDAC-4CF1-A38C-B1F5E05F4485}.Debug|ARM.ActiveCfg = Debug|ARM
59+
{DA79C619-BDAC-4CF1-A38C-B1F5E05F4485}.Debug|ARM.Build.0 = Debug|ARM
60+
{DA79C619-BDAC-4CF1-A38C-B1F5E05F4485}.Debug|ARM64.ActiveCfg = Debug|ARM64
61+
{DA79C619-BDAC-4CF1-A38C-B1F5E05F4485}.Debug|ARM64.Build.0 = Debug|ARM64
3862
{DA79C619-BDAC-4CF1-A38C-B1F5E05F4485}.Debug|x64.ActiveCfg = Debug|x64
3963
{DA79C619-BDAC-4CF1-A38C-B1F5E05F4485}.Debug|x64.Build.0 = Debug|x64
4064
{DA79C619-BDAC-4CF1-A38C-B1F5E05F4485}.Debug|x86.ActiveCfg = Debug|Win32
4165
{DA79C619-BDAC-4CF1-A38C-B1F5E05F4485}.Debug|x86.Build.0 = Debug|Win32
66+
{DA79C619-BDAC-4CF1-A38C-B1F5E05F4485}.Release|ARM.ActiveCfg = Release|ARM
67+
{DA79C619-BDAC-4CF1-A38C-B1F5E05F4485}.Release|ARM.Build.0 = Release|ARM
68+
{DA79C619-BDAC-4CF1-A38C-B1F5E05F4485}.Release|ARM64.ActiveCfg = Release|ARM64
69+
{DA79C619-BDAC-4CF1-A38C-B1F5E05F4485}.Release|ARM64.Build.0 = Release|ARM64
4270
{DA79C619-BDAC-4CF1-A38C-B1F5E05F4485}.Release|x64.ActiveCfg = Release|x64
4371
{DA79C619-BDAC-4CF1-A38C-B1F5E05F4485}.Release|x64.Build.0 = Release|x64
4472
{DA79C619-BDAC-4CF1-A38C-B1F5E05F4485}.Release|x86.ActiveCfg = Release|Win32

0 commit comments

Comments
 (0)