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 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:
Infatti la locazione alla quale si trova il PE Header del programma è corrispondente a 00400000.
Per la GetCommandLine:
Ecco EAX prima:
EAX = 00400000Eseguita la procedura GetCommandLine:
EAX = 001B1CC0Andiamo 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:
















