instance handle
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 DWORDAnche 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 = 75F13811Eseguita la procedura GetModuleHandle:
EAX = 00400000Vediamo sulla memory map:
















