GetModuleHandle e GetCommandLine.

GetModuleHandle e GetCommandLine.
Benissimo.
Ho visto il tipo LPSTR che equivale a DWORD.
Questo tipo l'ho incontrato fra le variabili non inizializzate della procedura per la creazione di una finestra, come tipo di CommandLine, ossia il puntatore lungo al nome della linea di comando.
Incontro anche un altro tipo, che è HINSTANCE
>br> Lo trovo in WINDOWS.INC:
HINSTANCE       TYPEDEF DWORD
Anche questo è un tipo DWORD.
Non ho capito bene cosa indica.
Indicherebbe un tipo "handle di un'istanza dell'applicazione"... sempre di grandezza DWORD.

Torno al programma...

.DATA
NomeDellaClasse	DB "QuestaClasse",00H
NomeDellaFinestra DB "QuestaFinestra",00H

.DATA?
Istanza	HINSTANCE ?
LineaDiComando LPSTR ?

La parte che viene dopo, è fatta da tre procedure, due delle quali si fanno carico di ottenere in EAX dei valori per Istanza e LineaDiComando, e la terza è la WinMain che si occupa di creare la finestra usando quelle variabili.
Segue ExitProcess che chiude tutto.
.CODE
INVOKE	GetModuleHandle, NULL
MOV	Istanza,EAX

INVOKE	GetCommandLine
MOV	LineaDiComando,EAX

INVOKE	WinMain,Istanza,NULL,LineaDiComando,SW_SHOWDEFAULT

INVOKE	ExitProcess,EAX


Iczelion mi dice che l'Handle dell'Istanza (Istanza, di tipo HINSTANCE), è l'indirizzo lineare del programma in memoria.

Lo verifico con OllyDbg in esecuzione passo-passo (con F8):
EAX prima dell'esecuzione di GetModuleHandle:
EAX = 75F13811
Eseguita la procedura GetModuleHandle:
EAX = 00400000
Vediamo sulla memory map:

instance handle
Infatti la locazione alla quale si trova il PE Header del programma è corrispondente a 00400000.
Per la GetCommandLine:
Ecco EAX prima:
EAX = 00400000
Eseguita la procedura GetCommandLine:
EAX = 001B1CC0
Andiamo a vedere cosa c'è a questo indirizzo:
001B1CC0  22 43 3A 5C 6D 61 73 6D 33 32 5C 6D 69 6F 2E 65  "C:\masm32\mio.e
001B1CD0  78 65 22 00 AB AB AB AB AB AB AB AB EE FE EE FE  xe".««««««««îþîþ
001B1CE0  00 00 00 00 00 00 00 00 01 36 7B 26 0B AD 00 1C  ........6{&­.
001B1CF0  43 00 3A 00 5C 00 57 00 69 00 6E 00 64 00 6F 00  C.:.\.W.i.n.d.o.
001B1D00  77 00 73 00 5C 00 73 00 79 00 73 00 74 00 65 00  w.s.\.s.y.s.t.e.
Questo si trova nella memoria nella seguente posizione:


Caricato il 11/09/2009 - 01:32 in Album predefinito

Commenti (0)