come scaricare la dll - pagina 4

 
OneDepo >> :

Sì, hai ragione, questo ridurrà il tempo di attesa per la riscrittura della dll, ma non risolverà il problema principale: indicatore scaricato - cambia la dll! Chiaramente, la libreria è caricata tramite LoadLibrary(), il contatore di caricamento è impostato a 1, ma FreeLibrary() non è apparentemente chiamato in deinit(). Il contatore non viene resettato a 0 e il dll è bloccato fino alla chiusura del terminale. Penso di sì, ma dobbiamo verificare con gli sviluppatori.

Chi vi impedisce (tranne alcuni partecipanti di questo ramo) di fare

#importare "kernel32.dll".

int GetModuleHandleA ( stringa sss);
void FreeLibrary(int hhh);
#importare


deinit()

{

handlissimo=GetModuleHandleA("test-dll.dll");

FreeLibrary(handlissimo) ;

}


???

Puoi riempire i parametri della funzione da solo. Per eliminare TOTALMENTE dalla MEMORIA tutte le DLL liberate in questo modo - a causa delle limitazioni di metatrader.exe e a causa del forte caching menzionato in precedenza da me in vinda (che include la sostituzione dei file dll protetti da dllcache) - usate regsvr32.

Vedo che TheExpert è collegato a MetaQuotes.

 

Nota: a volte anche regsvr32 non scarica la DLL, e Windows ne riempie una vecchia versione. La pratica dimostra che una singola DLL può rimanere in memoria per SETTIMANE. In questo caso solo il riavvio aiuterà. Se non volete riavviare, i modi semi-hacker vi aiuteranno, come Process Explorer. Può scaricare dalla memoria qualsiasi cosa da qualsiasi luogo - contrariamente a quanto sostengono i vocazionisti su questo forum (e caricare anche, ah ah, ma non ne hai bisogno).

http://www.softpedia.com/get/System/System-Info/Process-Explorer.shtml

breve descrizione e plugin:

http://rootkits.su/app/ShowApp.aspx?id_a=36

 

Vedo che ci stai ancora dando dentro. Tutto a posto. Ecco cosa ci dice MS stessa su regsvr32:


Strumento Regsvr32: uso e messaggi di errore


"Lo strumento Regsvr32 (Regsvr32.exe) è progettato per registrare e disregistrare i controlli OLE, come i file DLL o OCX registrati automaticamente. Questo può essere necessario quando si risolvono alcuni problemi nel sistema Windows, Microsoft Internet Explorer e altri programmi. Per esempio, secondo l'articolo della Microsoft Knowledge Base qui sotto, lo strumento Regsvr32.exe dovrebbe essere usato per disiscrivere il controllo Wuv3is.dll prima di reinstallarlo dal sito web Windows Update Center.


di più:

"L'utilità regsvr32.exe è usata per registrare DLL e controlli ActiveX nel registro di Windows. Può anche essere usato per rimuovere le incongruenze tra i file DLL".

 
HideYourRichess >> :

Vedo che ci stai ancora dando dentro. Tutto a posto. Ecco cosa ci dice MS stessa su regsvr32:


Strumento Regsvr32: uso e messaggi di errore


"Regsvr32 (Regsvr32.exe) è usato per registrare e disregistrare i controlli OLE come file DLL o OCX registrati automaticamente. Questo può essere necessario quando si risolvono alcuni problemi nel sistema Windows, Microsoft Internet Explorer e altri programmi. Per esempio, secondo l'articolo della knowledgebase di Microsoft qui sotto, lo strumento Regsvr32.exe dovrebbe essere usato per disregistrare il controllo Wuv3is.dll prima di reinstallarlo dal sito web di Windows Update Center".


di più:

"L'utilità regsvr32.exe è usata per registrare DLL e controlli ActiveX nel registro di Windows. Può anche essere usato per rimuovere le incongruenze tra i file DLL".

Bene, zio hacker, dovresti aver già indovinato dalla tua stessa ultima frase come regsvr32 funziona per noi:


http://support.microsoft.com/kb/207132

RegSvr32.exe chiama le seguenti funzioni Win32 in questo ordine:

* OleInitialize
* LoadLibrary per caricare la DLL
* DllRegisterServer o DllUnregisterServer
* FreeLibrary
* OleUninitialize

http://msdn.microsoft.com/en-us/library/ms683152(VS.85).aspx
Funzione FreeLibrary

Libera il modulo della dynamic-link library (DLL) caricato e, se necessario, diminuisce il suo numero di riferimenti.
Quando il conteggio dei riferimenti raggiunge lo zero, il modulo viene scaricato dallo spazio degli indirizzi del chiamante
e l'handle non è più valido.

Cioè, regsvr32 carica e rilascia la libreria. Ma a differenza di terminal.exe, che da solo o con una soluzione semplice ed elegante che ho suggerito sopra, libera la libreria, MA CONTINUA A RIMANERE IN MEMORIA, (dando a Windows ragioni per non scaricare la libreria per ora e lasciare che qualsiasi altro processo lo faccia) - a differenza di metatrader appeso in memoria, l'utilità da linea di comando regsvr32.L'utilità a riga di comando exe FERMA il suo PROCESSO ed ESCE dalla MEMORIA, il che indica a Windows di scaricare completamente la libreria dalla memoria.

Una libreria può essere scaricata senza usare regsvr32, ma è una roulette. Ad alcuni piace la roulette, alla maggior parte dei professionisti no, è una questione di livello di sviluppo.

Se la libreria è semplice e non si aggrappa a TANTE altre librerie, PUÒ scaricarsi rapidamente. Ma se la libreria è complessa, con database, con controlli esotici, può richiedere minuti o addirittura ore per essere scaricata.

A proposito, riguardo al parametro AlwaysUnloadDLL - Microsoft stessa sostiene che questo funzionava solo fino al 2000 (allora e oggi applicava algoritmi complessi per calcolare "la necessità di una DLL"):

http://msdn.microsoft.com/en-us/library/bb776795(VS.85).aspx

Scaricare la DLL

La Shell scarica automaticamente una DLL quando il suo numero di utilizzo è zero, ma solo dopo che la DLL non è stata usata per un periodo di tempo. Questo periodo inattivo potrebbe essere inaccettabilmente lungo a volte, specialmente quando una DLL di estensione Shell è in fase di debug. Per i sistemi operativi precedenti a Windows 2000, potete accorciare il periodo inattivo aggiungendo le seguenti informazioni al registro di sistema.

  • HKEY_LOCAL_MACHINE
  • Software
  • Microsoft
  • Windows
  • CurrentVersion
  • Esploratore
  • AlwaysUnloadDll
 

Dato che sto ancora soffrendo di un brutto raffreddore (ma badate, anche mentre sono a letto con la febbre aiuto la gente a risolvere i loro problemi di terminal.exe gratuitamente, cioè a risolvere esclusivamente i loro problemi di soldi), posso dire agli interessati (e anche ai disinformati studenti delle scuole professionali) quanto sia difficile lavorare come sysadmin in grandi aziende a distanza.

Qualsiasi grande azienda usa strumenti UNIVERSALI. Questo significa che tutti i server - locali e globali esegue Eorakl, su tutte le stazioni di lavoro utilizzare lo stesso programma della stessa versione del collegamento Office, Excel- o programma analitico con Eorakl o MS SQL Server, alcuni "dbconnect.dll". E poi un giorno "meraviglioso" per gli sviluppatori sysadmin finalmente debug una nuova versione del programma e tutti i sysadmin locali (in compagnia dei primi cento - i sysadmin possono essere 500-800, 1,250 Terabyte di memoria su disco rigido, 130 nodi NCR, 145 sistemi server Unix e 2600 server Windows, 80.000 utenti di posta in più di 2.000 sedi aziendali) arriva un ordine di SOSTITUIRE "domani" questo programma. Il programma è complesso, usa molte cose, riscriverlo semplicemente sul computer non funzionerà. Ed è necessario riavviare il computer dopo regsvr32 - se il sysadmin ha tempo per farlo.

In questa sostituzione può essere fatto solo dalle 18-00 alle 24-00, perché fino alle 18-00 gli impiegati stanno ancora lavorando sui computer, e alle 24-00 sul server inizia il lavoro di servizio su Yorakla, le stazioni stanno iniziando l'aggiornamento automatico di Windows e l'aggiornamento automatico dell'antivirus. Ci sono mezzi per avviare REMOTE regsvr32 e sovraccaricare la stazione senza andare alla stazione, ma non sempre funzionano, (Firewall attivato, utente non-logof-lenny, ecc.) E i computer dei sysadmin locali possono essere 50-100, lontani l'uno dall'altro, e su piani diversi, e in uffici già chiusi.

Così i sysadmin corrono intorno all'edificio dell'azienda ed eseguono regsvr32 a mano.

 

Regsvr32 è progettato per registrare e disregistrare i server COM.

Queste non sono tutte le DLL. Questo è un tipo speciale di dll. Non c'è bisogno di chiamare Regsvr32.

È sufficiente chiamare FreeLibrary come mostrato sopra o non usare "#import" ma usare la coppia:

LoadLibrary, FreeLibrary.

A proposito, le mie DLL sono per qualche motivo rilasciate subito dopo aver rimosso l'indicatore.

 

In realtà, personalmente, sto scrivendo per coloro che sanno leggere il russo e l'inglese. Gente strana, ripetono per la decima volta qui PERCHE' è stato creato regsvr32. Lo cantano come un mantra, come un incantesimo, mentre altri non sanno perché. E cosa importa se regsvr32 fa quello che ci serve e non ha effetti collaterali?

È come un medico di ambulanza o di terapia intensiva che prescrive l'iposolfito di sodio a un alcolizzato (uno "avanzato" come lui)

http://drugslist.ru/drugs/antichlor-sodium-thiosulfate/

e comincia a gridare che non lo berrà perché ..... è un fotografo e vogliono avvelenarlo!

http://www.rwwc.ru/recipe/index6.php

Se ci sono così tante persone intelligenti qui, allora lasciate che vi indichino un'ALTRA utility standard, che è a portata di mano su qualsiasi computer, che caricherebbe e scaricherebbe immediatamente QUALSIASI LIBRARY che volete, in modo da resettare la cache delle DLL da parte di Windows in questo modo.

 
AlexEro >> :

...

Per la decima volta ripetono qui PERCHE' è stato creato regsvr32. Cosa importa se regsvr32 fa quello che ci serve e non ha effetti collaterali? Lo cantano come un mantra, come un incantesimo.

È come un medico di ambulanza o di pronto soccorso che prescrive l'iposolfito di sodio a un alcolizzato (uno "avanzato" così)

...

Tutto questo è molto importante. Se state facendo analogie mediche, quello che state scrivendo qui è come trattare una testa malata con un'ascia.


AlexEro >> :

...

Scaricare la libreria può avvenire SENZA usare regsvr32, ma è una roulette. Ad alcuni piace la roulette, alla maggior parte dei professionisti no, è una questione di livello di sviluppo.

Se la libreria è semplice e non si aggrappa a TANTE altre librerie, PUÒ scaricarsi rapidamente. Ma se la libreria è complessa, con database, con controlli esotici, può richiedere minuti o addirittura ore per essere scaricata.

...


Semplicemente non capisci come funziona in linea di principio il meccanismo di caricamento/scaricamento di dll, ecco perché hai delle fantasie così malate su questo argomento. Non dovreste usare regsvr32, non è previsto per questo. Inoltre non dovreste cercare di scaricare la libreria per deinit utilizzando FreeLibrary, la libreria dovrebbe essere scaricata da sola, se non ci sono errori grossolani in essa, naturalmente. La tua "soluzione semplice ed elegante" è una sciocchezza. Non funzionerà in molti casi, specialmente se si verificano deadlock all'interno del DllMain.


Ripeto, l'unico modo normale e corretto per scaricare una dll è scrivere la dll stessa senza errori. Se la dll non viene scaricata normalmente - allora le mani del codificatore sono storte (cioè il codificatore, nel terminale stesso tutto è fatto correttamente) - questo è tutto. Ho sempre, ripeto, sempre scaricato dll normalmente, subito dopo la rimozione dell'indicatore. E questo è corretto, è il modo in cui è stato progettato nel terminale.


E tu cerchi invano di dare peso alla tua finzione facendo riferimento alla tua esperienza di sysadmin. Abbiamo già scoperto che non sei un sysadmin molto intelligente, quindi sembra molto infantile, ridicolo.

 
HideYourRichess >> :
Semplicemente non capisci come funziona in linea di principio il meccanismo di caricamento/scaricamento delle dll, ecco perché hai delle fantasie così malate su questo argomento.... (Inoltre non dovreste provare a scaricare una libreria per deinit utilizzando FreeLibrary, la libreria dovrebbe essere scaricata da sola, se non ci sono errori grossolani in essa, naturalmente. La tua "soluzione semplice ed elegante" è una sciocchezza. Non funzionerà in molti casi, specialmente se si verificano deadlock all'interno del DllMain.
Zio hacker, non c'è logica nelle tue parole: se la libreria è SEMPRE e SEMPRE scaricata, perché la "mia" chiamata FreeLibrary secondo te "non funziona in molti casi"? Che danno potrebbe venire da una chiamata extra a FreeLibrary nel blocco deinit()? Chiamare FreeLibrary() secondo voi bloccherebbe in qualche modo il rilascio della libreria o qualcosa del genere? Non è chiaro, zio kool hacker, ed è ovvio.
 
AlexEro >> :
Zio hacker, non c'è logica in quello che stai dicendo

1a domanda - come fa il sistema a sapere da quali processi scaricare la dll?

Domanda 2 - come faccio a trovare il punto di ingresso senza caricare la dll?


Ora, essenzialmente. La dll viene caricata e scaricata durante regsvr per una corretta registrazione. E naturalmente questo non ha alcun effetto sullo scarico da altri processi.

Non cercate di sembrare più stupidi di quello che siete. Puoi leggere il mana, però.

Se la libreria si è SEMPRE scaricata, perché la "mia" chiamata FreeLibrary secondo te "non funziona in molti casi"? Che danno potrebbe venire da una chiamata extra a FreeLibrary in un blocco deinit()? Forse la tua chiamata a FreeLibrary() bloccherà in qualche modo il rilascio della libreria, o cosa? Zio hacker, e uno chiaro.

È ovvio. Oltre a scaricare la dll, l'implementazione della deinizializzazione dell'indicatore (esperto) può essere qualsiasi cosa direttamente collegata ad essa, il che trasforma il rilascio non autorizzato della dll in un hack, che a sua volta non garantisce il corretto funzionamento del terminale.


>> Quindi, buona fortuna, continua a provare.

2All: non pensare di assumerlo come amministratore.

Motivazione: