|
| 1 | +#pragma once |
| 2 | + |
| 3 | +#ifdef _M_X64 |
| 4 | + |
| 5 | +#define KARMA_MACRO_1 |
| 6 | +#define KARMA_MACRO_2 |
| 7 | + |
| 8 | +#else |
| 9 | +// .. |
| 10 | +#define JUNK_CODE_TWO_2(lineno, value) \ |
| 11 | + __asm {jz _1##lineno} \ |
| 12 | + __asm {jnz _1##lineno} \ |
| 13 | + __asm {_emit 0x##value} \ |
| 14 | + __asm {_1##lineno: } |
| 15 | +#define JUNK_CODE_TWO_1(name, value) JUNK_CODE_TWO_2(name, value) |
| 16 | +#define JUNK_CODE_TWO JUNK_CODE_TWO_1(__LINE__, __LINE__*1111%253) |
| 17 | + |
| 18 | +// .. |
| 19 | +#define JUNK_CODE_TWO_2_2(lineno) \ |
| 20 | + __asm {jz _112##lineno} \ |
| 21 | + __asm {jnz _112##lineno} \ |
| 22 | + __asm {_emit 0e8h} \ |
| 23 | + __asm {_112##lineno: } |
| 24 | +#define JUNK_CODE_TWO_1_2(name) JUNK_CODE_TWO_2_2(name) |
| 25 | +#define JUNK_CODE_TWO2 JUNK_CODE_TWO_1_2(__LINE__) |
| 26 | + |
| 27 | +// .. |
| 28 | +#define JUNK_CODE_TWO_2_3(lineno) \ |
| 29 | + __asm { xor eax, eax } \ |
| 30 | + __asm { test eax, eax } \ |
| 31 | + __asm {jz _1121##lineno} \ |
| 32 | + __asm {jnz _1120##lineno} \ |
| 33 | + __asm {_1120##lineno: } \ |
| 34 | + __asm {_emit 0e8h} \ |
| 35 | + __asm {_1121##lineno: } \ |
| 36 | + __asm { xor eax, 3 } \ |
| 37 | + __asm { add eax, 4 } \ |
| 38 | + __asm { xor eax, 5 } |
| 39 | +#define JUNK_CODE_TWO_1_3(name) JUNK_CODE_TWO_2_3(name) |
| 40 | +#define JUNK_CODE_TWO3 JUNK_CODE_TWO_1_3(__LINE__) |
| 41 | + |
| 42 | + |
| 43 | +// .. |
| 44 | +#define JUNK_CODE_THREE_2(lineno, value1, value2) \ |
| 45 | + __asm {clc} \ |
| 46 | + __asm {jnb _3t##lineno} \ |
| 47 | + __asm {_emit 0x##value1} \ |
| 48 | + __asm {_emit 0x##value2} \ |
| 49 | + __asm {_3t##lineno: } |
| 50 | +#define JUNK_CODE_THREE_1(name, value1, value2) JUNK_CODE_THREE_2(name, value1, value2) |
| 51 | +#define JUNK_CODE_THREE JUNK_CODE_THREE_1(__LINE__, __LINE__*1222%253, __LINE__*1111%253) |
| 52 | + |
| 53 | +// .. |
| 54 | +#define JUNK_CODE_FOUR_2(lineno, value) \ |
| 55 | + __asm {jl _11f##lineno} \ |
| 56 | + __asm {_12f##lineno: } \ |
| 57 | + __asm {jmp _13f##lineno } \ |
| 58 | + __asm {_emit 0x##value } \ |
| 59 | + __asm {_11f##lineno: } \ |
| 60 | + __asm {jz _12f##lineno } \ |
| 61 | + __asm {_13f##lineno: } |
| 62 | +#define JUNK_CODE_FOUR_1(name, value) JUNK_CODE_FOUR_2(name, value) |
| 63 | +#define JUNK_CODE_FOUR JUNK_CODE_FOUR_1(__LINE__, __LINE__*1111%253) |
| 64 | + |
| 65 | + |
| 66 | +// .. |
| 67 | +#define JUNK_CODE_FIVE_2(lineno) \ |
| 68 | + __asm {pushf} \ |
| 69 | + __asm {push 0x0a} \ |
| 70 | + __asm {_51f##lineno: jnb _53f##lineno} \ |
| 71 | + __asm {jmp _52f##lineno} \ |
| 72 | + __asm {_52f##lineno: call _54f##lineno} \ |
| 73 | + __asm {_53f##lineno: jnb _52f##lineno} \ |
| 74 | + __asm {_54f##lineno: add esp,4} \ |
| 75 | + __asm {jmp _55f##lineno} \ |
| 76 | + __asm {_55f##lineno: } \ |
| 77 | + __asm {dec dword ptr [esp]} \ |
| 78 | + __asm {jno _56f##lineno} \ |
| 79 | + __asm {_56f##lineno: jns _51f##lineno} \ |
| 80 | + __asm {jp _57f##lineno} \ |
| 81 | + __asm {_57f##lineno: add esp,4} \ |
| 82 | + __asm {popf} \ |
| 83 | + __asm {jmp _58f##lineno} \ |
| 84 | + __asm {_58f##lineno: } |
| 85 | +#define JUNK_CODE_FIVE_1(name) JUNK_CODE_FIVE_2(name) |
| 86 | +#define JUNK_CODE_FIVE JUNK_CODE_FIVE_1(__LINE__) |
| 87 | + |
| 88 | + |
| 89 | +#define KARMA_MACRO_1 JUNK_CODE_FOUR JUNK_CODE_TWO3 JUNK_CODE_THREE JUNK_CODE_TWO JUNK_CODE_FIVE JUNK_CODE_TWO2 |
| 90 | +#define KARMA_MACRO_2 JUNK_CODE_FIVE JUNK_CODE_THREE JUNK_CODE_TWO2 JUNK_CODE_TWO JUNK_CODE_FOUR JUNK_CODE_TWO3 |
| 91 | +#endif |
0 commit comments