1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
| #include <iostream>
char format[] = "%d\n"; char* p = format; __declspec(naked) void my_test() { __asm { push ebp
push esp pop ebp
push ecx
push 1 push ebp push 0FFFFFFFCh mov eax, dword ptr[esp] mov edx, dword ptr[esp + 4] add eax, edx mov dword ptr[esp + 4], eax pop esi mov eax, dword ptr[esp] mov edx, dword ptr[esp + 4] mov dword ptr[eax], edx
push 0FFFFFFFCh mov eax, dword ptr[esp] mov edx, dword ptr[esp + 4] add eax, edx mov dword ptr[esp + 4], eax pop esi mov eax, dword ptr[esp] mov edx, dword ptr[eax] mov dword ptr[esp], edx pop eax
push 1 push eax mov eax,dword ptr[esp] mov edx,dword ptr[esp+4] add eax,edx mov dword ptr[esp+4],eax pop esi
push ebp push 0FFFFFFFCh mov eax, dword ptr[esp] mov edx, dword ptr[esp + 4] add eax, edx mov dword ptr[esp + 4], eax pop esi mov eax, dword ptr[esp] mov edx, dword ptr[esp + 4] mov dword ptr[eax], edx pop esi
push ebp push 0FFFFFFFCh mov eax, dword ptr[esp] mov edx, dword ptr[esp + 4] add eax, edx mov dword ptr[esp + 4], eax pop esi mov eax, dword ptr[esp] mov edx, dword ptr[eax] mov dword ptr[esp], edx pop ecx add esp, 8
push ecx push p
push Next
push printf ret
Next :
push 8 push esp mov eax,dword ptr[esp] mov edx, dword ptr[esp+4] add eax,edx mov dword ptr[esp+4],eax pop esi mov esi,dword ptr[esp] xor eax, eax
push ebp pop esp
pop ebp ret } }
int main() { my_test(); }
|