Je ne sais pas, car il y a quelqu'un dans les commentaires de la page qui dit que ça marche sous Windows 7.
J'essaie de compiler ça avec Code::Blocks (mais là après on parle d'un autre forum, d'un autre langage) et je bute sur la syntaxe du asm inline dans le code original on a :
J'ai choisi GNU Compiler comme compilateur du projet.Code:
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 //just saves execution contect and calls check() _declspec(naked) Proxy() { _asm{ //save execution contect and calls check() -the rest depends upon the value check() returns // if it is 1, proceed to the actual callee. Otherwise,return STATUS_ACCESS_DENIED pushfd pushad mov ebx,esp add ebx,40 push ebx call check cmp eax,1 jne block //proceed to the actual callee popad popfd jmp RealCallee //return STATUS_ACCESS_DENIED block:popad mov ebx, dword ptr[esp+8] mov dword ptr[ebx],0 mov eax,0xC0000022L popfd ret 32 } }
J'ai une belle erreur qui dit que "_asm" n'exsite pas, obligé de mettre asm et d'utiliser les () au lieu des {} et de mettre des "" ce qui donne :
Par contre ça compile mais je ne suis pas sûr de la syntaxe de l'asm ici et que ça fonctionnera. J'ai jeté un oeil sur http://www.ibiblio.org/gferg/ldp/GCC...-HOWTO.html#s5 mais je suis pas sûr d'avoir tout compris...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 //just saves execution contect and calls check() _declspec(naked) Proxy() { asm ( "pushfd" "pushad" "mov ebx,esp" "add ebx,40" "push ebx" "call check" "cmp eax,1" "jne block" "popad" "popfd" "jmp RealCallee" "block:popad" "mov ebx, dword ptr[esp+8]" "mov dword ptr[ebx],0" "mov eax,0xC0000022L" "popfd" "ret 32" ); }