Informations sur: Problème récuperation handle

Publié par Freem le 18/10/2007

Description

Programme permettant de charger une DLL

Code source (langage asm)

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
[EXTERN ExitProcess]
[EXTERN FreeLibrary]
[EXTERN	GetProcAddress]
[EXTERN LoadLibraryA]
[EXTERN	MessageBoxA]
 
[IMPORT ExitProcess kernel32.dll]
[IMPORT FreeLibrary	kernel32.dll]
[IMPORT GetProcAddress kernel32.dll]
[IMPORT LoadLibraryA kernel32.dll]
[IMPORT MessageBoxA	user32.dll]
 
[SEGMENT CODE USE32 CLASS=CODE]
	..start
		; ==========================
		; ==========================
		; Charge la dll
		push dword DllName
		call [LoadLibraryA]
		; Si EAX == 0, le chargement a echoue
		cmp eax, 0
		je LoadLibraryFailed
        ; ==========================
 
 
		; Le probleme vient de la
		mov hDll, dword eax       
 
        ; ===============================================================================================
        ; ===============================================================================================
        ; Recupere l'adresse de la fonction TestFun grace a GetProcAdress
		push dword FuncName
		push dword hDll
		call [GetProcAddress]
		; L'adresse de la fonction se trouve dans eax. Si eax == 0, la fonction a echouee
		cmp eax, 0
		je GetProcAddressFailed
        ; ===============================================================================================
 
		; Appel la fonction ( pas de call [eax] sinon sa plante ;-) )
		call eax
 
        ; ========================================================================================================================
		; ========================================================================================================================
		; Liberation de la DLL en memoire grace a FreeLibrary
		; Comme le handle a deja ete sauvegarde sur la pile, on a plus qu'a appelle FreeLibrary qui se chargera de tout
		; (la pile etant redevenu a son etat d'origine apres l'appel a GetProcAddress)
        call [FreeLibrary]
        cmp eax, 0
        je FreeLibFailed
		; ========================================================================================================================
 
        ; ====================
		; ====================
		; Fin du programme
		push dword 0
		call [ExitProcess]
		; ====================
 
	; En cas d'echec de LoadLbraryA, on affiche un message d'erreur et on quitte le programme
	LoadLibraryFailed:
		push dword 0
		push dword MsgTitle
		push dword MsgFailedText
		push dword 0
		call [MessageBoxA]
		push dword 0
		call [ExitProcess]
 
    ; En cas d'echec de GetProcAddress, on affiche un message d'erreur et on quitte le programme
	GetProcAddressFailed:
    	push dword 0
		push dword MsgTitle2
		push dword MsgFailedText
		push dword 0
		call [MessageBoxA]
		push dword 0
		call [ExitProcess]
 
    ; En cas d'echec de FreeLibrary, on affiche un message d'erreur et on quitte le programme
    FreeLibFailed:
        push dword 0
		push dword MsgTitle3
		push dword MsgFailedText
		push dword 0
		call [MessageBoxA]
		push dword 0
		call [ExitProcess]
 
[SEGMENT DATA USE32 CLASS=DATA]
	DllName				db		"PE.dll", 0
	FuncName			db		"TestFunc", 0
	MsgTitle			db		"LoadLibraryA", 0
	MsgTitle2			db		"GetProcAdress", 0
	MsgTitle3			db		"FreeLibrary", 0
    MsgFailedText		db		"Chargement échoué", 0
    MsgSuccessText		db		"Chargement effectué", 0
 
[SEGMENT BSS US32 CLASS=BSS]
	hDll:		resd	1
v6 © Computaid SPRL 2005-2008 - Tous droits réservés - Hébergé par eTigris - Page générée en 0,024 s - Crédits - Stats
1 connecté