Skip to content

Commit d20bd97

Browse files
committed
Hook callback body is now consolidated into the macro
1 parent 3c1a076 commit d20bd97

5 files changed

Lines changed: 31 additions & 118 deletions

File tree

PackerAttackerHook/PackerAttackerHook.vcxproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@
9797
<ClInclude Include="SyncLock.h" />
9898
<ClInclude Include="TrackedMemoryBlock.h" />
9999
<ClInclude Include="UnpackingEngine.h" />
100-
<ClInclude Include="UnpackingEngineHookCallbacks.h" />
101100
</ItemGroup>
102101
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
103102
<ImportGroup Label="ExtensionTargets">

PackerAttackerHook/PackerAttackerHook.vcxproj.filters

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,6 @@
4141
<ClInclude Include="UnpackingEngine.h">
4242
<Filter>Header Files</Filter>
4343
</ClInclude>
44-
<ClInclude Include="UnpackingEngineHookCallbacks.h">
45-
<Filter>Header Files</Filter>
46-
</ClInclude>
4744
<ClInclude Include="TrackedMemoryBlock.h">
4845
<Filter>Header Files</Filter>
4946
</ClInclude>

PackerAttackerHook/UnpackingEngine.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#include "UnpackingEngine.h"
2-
#include "UnpackingEngineHookCallbacks.h"
32
#include "Memory.h"
43
#include "Logger.h"
54
#include "DebugStackTracer.h"

PackerAttackerHook/UnpackingEngine.h

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,29 @@
77
#include <Windows.h>
88
#include <map>
99

10-
#define _HOOK_DEFINE_INTERNAL(reT, reTm, name, args) \
11-
typedef reT (reTm *_orig ## name) args; \
12-
_orig ## name orig ## name; \
13-
__declspec(dllexport) reT reTm on ## name args; \
14-
__declspec(dllexport) static reT reTm _on ## name args;
15-
#define HOOK_DEFINE_2(reT, reTm, name, arg1, arg2) _HOOK_DEFINE_INTERNAL(reT, reTm, name, (arg1, arg2));
16-
#define HOOK_DEFINE_5(reT, reTm, name, arg1, arg2, arg3, arg4, arg5) _HOOK_DEFINE_INTERNAL(reT, reTm, name, (arg1, arg2, arg3, arg4, arg5));
17-
#define HOOK_DEFINE_6(reT, reTm, name, arg1, arg2, arg3, arg4, arg5, arg6) _HOOK_DEFINE_INTERNAL(reT, reTm, name, (arg1, arg2, arg3, arg4, arg5, arg6));
18-
#define HOOK_DEFINE_8(reT, reTm, name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) _HOOK_DEFINE_INTERNAL(reT, reTm, name, (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8));
19-
#define HOOK_DEFINE_10(reT, reTm, name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) _HOOK_DEFINE_INTERNAL(reT, reTm, name, (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10));
20-
#define HOOK_DEFINE_12(reT, reTm, name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12) _HOOK_DEFINE_INTERNAL(reT, reTm, name, (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12));
10+
#define _HOOK_DEFINE_INTERNAL(reT, reTm, name, args, argnames) \
11+
typedef reT (reTm *_orig ## name) args; /* define the function prototype */ \
12+
_orig ## name orig ## name; /* create a pointer to the original function */ \
13+
__declspec(dllexport) reT reTm on ## name args; /* declare the member-fucntion that will be called internal to the class */ \
14+
__declspec(dllexport) static reT reTm _on ## name args /* declare the static function that acts as a hook callback and forwards the call into the member function */ \
15+
{ \
16+
auto sg = getInstance()->lock->enterWithScopeGuard(); \
17+
if (getInstance()->shouldIgnoreHooks()) \
18+
return getInstance()->orig ## name argnames; \
19+
else \
20+
return getInstance()->on ## name argnames; \
21+
}
22+
23+
#define HOOK_DEFINE_1(reT, reTm, name, arg1) _HOOK_DEFINE_INTERNAL(reT, reTm, name, (arg1 a1), (a1));
24+
#define HOOK_DEFINE_2(reT, reTm, name, arg1, arg2) _HOOK_DEFINE_INTERNAL(reT, reTm, name, (arg1 a1, arg2 a2), (a1, a2));
25+
#define HOOK_DEFINE_3(reT, reTm, name, arg1, arg2, arg3) _HOOK_DEFINE_INTERNAL(reT, reTm, name, (arg1 a1, arg2 a2, arg3 a3), (a1, a2, a3));
26+
#define HOOK_DEFINE_4(reT, reTm, name, arg1, arg2, arg3, arg4) _HOOK_DEFINE_INTERNAL(reT, reTm, name, (arg1 a1, arg2 a2, arg3 a3, arg4 a4), (a1, a2, a3, a4));
27+
#define HOOK_DEFINE_5(reT, reTm, name, arg1, arg2, arg3, arg4, arg5) _HOOK_DEFINE_INTERNAL(reT, reTm, name, (arg1 a1, arg2 a2, arg3 a3, arg4 a4, arg5 a5), (a1, a2, a3, a4, a5));
28+
#define HOOK_DEFINE_6(reT, reTm, name, arg1, arg2, arg3, arg4, arg5, arg6) _HOOK_DEFINE_INTERNAL(reT, reTm, name, (arg1 a1, arg2 a2, arg3 a3, arg4 a4, arg5 a5, arg6 a6), (a1, a2, a3, a4, a5, a6));
29+
#define HOOK_DEFINE_7(reT, reTm, name, arg1, arg2, arg3, arg4, arg5, arg6, arg7) _HOOK_DEFINE_INTERNAL(reT, reTm, name, (arg1 a1, arg2 a2, arg3 a3, arg4 a4, arg5 a5, arg6 a6, arg7 a7), (a1, a2, a3, a4, a5, a6, a7));
30+
#define HOOK_DEFINE_8(reT, reTm, name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) _HOOK_DEFINE_INTERNAL(reT, reTm, name, (arg1 a1, arg2 a2, arg3 a3, arg4 a4, arg5 a5, arg6 a6, arg7 a7, arg8 a8), (a1, a2, a3, a4, a5, a6, a7, a8));
31+
#define HOOK_DEFINE_10(reT, reTm, name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) _HOOK_DEFINE_INTERNAL(reT, reTm, name, (arg1 a1, arg2 a2, arg3 a3, arg4 a4, arg5 a5, arg6 a6, arg7 a7, arg8 a8, arg9 a9, arg10 a10), (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10));
32+
#define HOOK_DEFINE_12(reT, reTm, name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12) _HOOK_DEFINE_INTERNAL(reT, reTm, name, (arg1 a1, arg2 a2, arg3 a3, arg4 a4, arg5 a5, arg6 a6, arg7 a7, arg8 a8, arg9 a9, arg10 a10, arg11 a11, arg12 a12), (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12));
2133

2234
#define HOOK_GET_ORIG(object, library, name) object->orig ## name = (_orig ## name)GetProcAddress(LoadLibraryA(library), #name); assert(object->orig ## name);
2335
#define HOOK_SET(object, hooks, name) hooks->placeHook(&(PVOID&)object->orig ## name, &_on ## name);
@@ -91,11 +103,17 @@ class UnpackingEngine
91103

92104
/* exception handler for hooking execution on tracked pages */
93105
long onShallowException(PEXCEPTION_POINTERS info);
94-
static long __stdcall _onShallowException(PEXCEPTION_POINTERS info);
106+
static long __stdcall _onShallowException(PEXCEPTION_POINTERS info)
107+
{
108+
return UnpackingEngine::getInstance()->onShallowException(info);
109+
}
95110

96111
/* exception handler for detecting crashes */
97112
long onDeepException(PEXCEPTION_POINTERS info);
98-
static long __stdcall _onDeepException(PEXCEPTION_POINTERS info);
113+
static long __stdcall _onDeepException(PEXCEPTION_POINTERS info)
114+
{
115+
return UnpackingEngine::getInstance()->onDeepException(info);
116+
}
99117

100118
};
101119

PackerAttackerHook/UnpackingEngineHookCallbacks.h

Lines changed: 0 additions & 100 deletions
This file was deleted.

0 commit comments

Comments
 (0)