Español
Foro

Welche Dll's lädt una Programa?

 
- Página 1 -



Frank
Abbing
Ein kleines Tool de me en API-Hooking Base. In uno Listbox voluntad todos Dlls aufgelistest, el gerade de Programmen geladen fueron.

Einfach Exe starten y luego irgendwelche Programas starten. Deren Dlls debería ahora gelistet y ser lo pieps kurz.
Bitte testet veces, si todavía irgendwo hakt.

3 kB
Hochgeladen:22.03.2007
Ladeanzahl101
Descargar
 
22.03.2007  
 



 
- Página 4 -



RGH
He, he, Franco, el war en efecto más como Gag pensamiento.

Beides ha sólo seine Vorteile: dynamisches oder statisches Linken.

Und Yo widerspreche sí no, daß statisches Linken más rápido es. Der Hauptgrund dafür es aber, daß beim dynamischen Linken antes el Call eben una GetProcAdress notwendig es, daß beim statischen linken wegfällt. (Es en efecto una Grund, por qué, el OpenGL-DLL para el XProfan-propio OGL-Función en XProfan statisch gelinkt son. Das ging natürlich sólo, porque jede XProfan-fähige Windowsversion OpenGL unterstützt.)

Beides läßt se auch con XProfan programa:
KompilierenMarcaSeparación
 $H Windows.ph                                       WindowsHeaderdatei nutzen
Declare hDLL&, Time&, Text$
hDLL& = @UseDLL(USER32.DLL)
Print Dynamisches Linken mit DEF: ;
Def GetWText(3) !User32.dll, GetWindowTextA
Text$ = @Space$(40)
Time& = &GetTickCount

whileLoop 1, 100000

    GetWText(%hWnd, @Addr(Text$), 40)

endwhile

print Int(&GetTickCount - Time&)
Print Dynamisches Linken mit EXTERNAL: ;
Text$ = @Space$(40)
Time& = &GetTickCount

whileLoop 1, 100000

    External(User32.dll, GetWindowTextA, %hWnd, @Addr(Text$), 40)

endwhile

print Int(&GetTickCount - Time&)
Print Dynamisches Linken mit Header-Datei: ;
Text$ = @Space$(40)
Time& = &GetTickCount

whileLoop 1, 100000

    ~GetWindowText(%hWnd, @Addr(Text$), 40)

endwhile

print Int(&GetTickCount - Time&)
Print Statisches Linken: ;
Declare GetWText&
GetWText& = ~GetProcAddress(hDLL&, GetWindowTextA)
Text$ = @Space$(40)
Time& = &GetTickCount

whileLoop 1, 100000

    @Call(GetWText&, %hWnd, @Addr(Text$), 40)

endwhile

print Int(&GetTickCount - Time&)
waitinput
/../funktionsreferenzen/XProfan/end/'>end

Um el statische Linken a vereinfachen, podría uno natürlich una zusätzliche Función einbauen, etwa:

GetWText& = GetLibAddr(User32.DLL, GetWindowTextA)

Saludo
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
27.03.2007  
 




RGH
Andreas Hötker
Yo podría me vorstellen, dass como GetProcAdress bajo Umständen viel mehr Tiempo verbraucht.


Sag Todavía!

Zwei ..., una Gedanke!

Saludo
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
27.03.2007  
 



Was Yo así sagen quería:
Wenn Yo el en el Augenblick correcto sehe, teilt Windows el Handles en verschiedene Kathegorien en - y speichert el auch unterschiedlich de (Kernel-, GDI-, Userhandles...). Handles en geladene DLL wirst du no bajo el Kernelhandles finden; el voluntad also (genau como Handles en Speicherbereiche) gesondert behandelt.
Wenn Yo el correcto sehe, necesario pero en GetProcAdress bajo Umständen a a 1000 verschiedene Pointer durchgesehen voluntad...
 
27.03.2007  
 




RGH
Als Untermauerung el Vermutung, daß ~GetProcAdress mehr Tiempo kostet:
KompilierenMarcaSeparación
 $H Windows.ph        WindowsHeaderdatei nutzen
Declare hDLL&, Time&
hDLL& = UseDLL(USER32.DLL)
Print UseDLL: ;
Time& = &GetTickCount

whileLoop 1, 100000

    UseDLL(USER32.DLL)

endwhile

print Int(&GetTickCount - Time&)
Print GetProcAdress: ;
Time& = &GetTickCount

whileLoop 1, 100000

    ~GetProcAddress(hDLL&, GetWindowTextA)

endwhile

print Int(&GetTickCount - Time&)
waitinput
end

Saludo
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
27.03.2007  
 




Frank
Abbing

Als Untermauerung el Vermutung, daß ~GetProcAdress mehr Tiempo kostet:


Oooch Roland. Hast pero no beachtet, el uno en el Programa GetProcAdress() pro Función sólo EINMAL benutzen muss. Zum Guardar el Adresse genügt entonces una simple Variable. Su Code va bastante al Thema vorbei, sodass dein Vergleich mächtig hinkt...


Wenn Yo el en el Augenblick correcto sehe, teilt Windows el Handles en verschiedene Kathegorien en - y speichert el auch unterschiedlich de (Kernel-, GDI-, Userhandles...). Handles en geladene DLL wirst du no bajo el Kernelhandles finden; el voluntad also (genau como Handles en Speicherbereiche) gesondert behandelt.
Wenn Yo el correcto sehe, necesario pero en GetProcAdress bajo Umständen a a 1000 verschiedene Pointer durchgesehen voluntad...


Sí, si du lo correcto sehen würdest. Hast du dir el Quellcode veces angesehen? Yo reingesehen... Das ha así aber rein gar nichts a tun.
Yo sagte ya, GetProcAdress es sólo una vez pro Función nötig. Mit dieser Technik es no nötig Daueraufrufe a produzieren, como Roland lo actualmente macht. Dass Profancodes effizienter ausgeführt voluntad puede, zeigt XPSE más que deutlich. Hast Si es usted el auch veces getestet, Roland? Yo denke - nein.
Hab deinen Code una kleines bischen modifiziert y ahora funktioniert él así, como WhichDlls lo dargelegt ha. Como sieht lo rabenschwarz de para deine Technik. Der Geschwindigkeitszuwachs con statischer Adresse beträgt 100 Prozent, es also doppelt así rápidamente...
KompilierenMarcaSeparación
hehe
 
27.03.2007  
 



Das erinnert mich doch muy a el xpse-Selbsttest:  [...] 

Yo finde el Espectáculos ya muy genau el Geschwindigkeitsunterschied.

Yo finde el XProfan de Haus de esta xpseTechnik mitbringen debería - y dar Franco bastante así si él meinte el XProfan aquí en el meisten Fällen völlig übertrieben y unnötig el Funktionsadresse cada vez neu ermittelt oder gar el DLL con LoadLibrary invitar voluntad. Wofür se el bien ser?
 
27.03.2007  
 




RGH
Frank Abbing
Oooch Roland. Hast pero no beachtet, el uno en el Programa GetProcAdress() pro Función sólo EINMAL benutzen muss. Zum Guardar el Adresse genügt entonces una simple Variable.


Oooch Franco, hast No beachtet, daß mein erstes Programa GetProcAdress() auch sólo una vez aufruft y el zweite sólo dazu dient, el Zeitaufwand zwischen GetProcAdress() y LoadLibrary() a vergleichen, para determinar, wer beim dynamischen Aufruf el Tiempo verbrät?

Wenn Yo en XProfan el dynamische Linken bevorzuge, entonces muß Yo el Adresse entonces bestimmen, si la Función el erste Tiempo verwandt se. Wenn ellos entonces a otro Punto en el Programa otra vez verwandt se, muß Yo ellos otra vez bestimmen oder Yo müßte en uno Tabla nachsehen, si el ya bekannt (y todavía gültig) es y ellos entonces uso. Das wäre zusätzlicher Verwaltungsaufwand.

El otro Alternative Es el Umwandlung en una statischen Aufruf, ya que el XPSE (y mein obiges Ejemplo) macht. Como en el zeitkritischen Dingen Sinn hacer kann, Yo sí ya vorgeschlagen, el en el nächste XProfan-Versión como Alternative einzubauen. Como ya he dicho: beide Varianten haben ihre Vor- y Nachteile.

Saludo
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
27.03.2007  
 




Frank
Abbing

y el zweite sólo dazu dient, el Zeitaufwand zwischen GetProcAdress() y LoadLibrary() a vergleichen, para determinar, wer beim dynamischen Aufruf el Tiempo verbrät?


Como ya dijo - al Thema vorbei.

Lo liegt me fern dir algo vorschreiben a querer y yo mag solche Diskussionen auch nada. Usted hast hier una Möglichkeit el Effizienz de XProfan todavía a steigern. Was du letztendlich lo machst, y si y cómo du el Kritik deiner User umsetzt, es deine Sache.
 
28.03.2007  
 



Hola Roland...

Tiempo a deinem Code:
Kann lo ser, dass du como algo mogelst? Usedll es doch una statischer Aufruf y GetProcAdress - se el como no dynamisch aufgerufen???
 
28.03.2007  
 



¡Hola Franco...



Hast du dir el Quellcode veces angesehen? Yo reingesehen... Das ha así aber rein gar nichts a tun.


Bin alles otro como una Experte para ASM. Was mach el Code de GetProcAdress porque genau? Durchsucht el no el Table después de el angegebenen Función?
Lerne gerne qué dazu.
 
28.03.2007  
 



Wo liegt el Denkfehler en folgendem Code:
KompilierenMarcaSeparación
 $H Windows.ph        WindowsHeaderdatei nutzen
Declare hDLL&, Time&, DLL$,LoadLibraryA&,GetProcAddress&,Funktion$,StringAddr&
LET DLL$=Kernel32.DLL
hDLL& = ~LoadLibraryA(@addr(DLL$))
LET Funktion$=GetProcAddress
LET GetProcAddress&=~GetProcAddress(hDLL&, @addr(Funktion$))
LET Funktion$=LoadLibraryA
LET LoadLibraryA&=~GetProcAddress(hDLL&, @addr(Funktion$))
LET DLL$=USER32.DLL
hDLL& = ~LoadLibraryA(@addr(DLL$))
Print Ohne irgendwas: ;
Time& = &GetTickCount

whileLoop 1, 100000

endwhile

print Int(&GetTickCount - Time&)
LET DLL$=$SYSPATH+USER32.DLL
Print LoadLibraryA +DLL$+ :;
StringAddr& = addr(DLL$)
Time& = &GetTickCount

whileLoop 1, 100000

    call(LoadLibraryA&,StringAddr&)

endwhile

print Int(&GetTickCount - Time&)
LET DLL$=USER32
Print LoadLibraryA +DLL$+ :;
StringAddr& = addr(DLL$)
Time& = &GetTickCount

whileLoop 1, 100000

    call(LoadLibraryA&,StringAddr&)

endwhile

print Int(&GetTickCount - Time&)
Print GetProcAdress ActivateKeyboardLayout: ;
Let Funktion$=ActivateKeyboardLayout
StringAddr& = addr(Funktion$)
Time& = &GetTickCount

whileLoop 1, 100000

    call(GetProcAddress&,hDLL&, StringAddr&)

endwhile

print Int(&GetTickCount - Time&)
Print GetProcAdress wvsprintfW: ;
Let Funktion$=wvsprintfW
StringAddr& = addr(Funktion$)
Time& = &GetTickCount

whileLoop 1, 100000

    call(GetProcAddress&,hDLL&, StringAddr&)

endwhile

print Int(&GetTickCount - Time&)
waitinput
ss=s4 href='./../../funktionsreferenzen/XProfan/end/'>end
 
28.03.2007  
 




RGH
Andreas Hötker
Was mach el Code de GetProcAdress porque genau? Durchsucht el no el Table después de el angegebenen Función?


Es sólo una API-Función, el el absolute Adresse uno Función uno geladenen Moduls zurückgibt. Como ellos el macht, entzieht se meiner Kenntnis. Como Microsoft seine Quellcodes (weitestgehend C y C++ con ASM-Teilen) no veröffentlicht, es auch no bastante simplemente el herauszubekommen. (Außerdem sería el eh no weiterhelfen.)
Yo vermute aber simplemente folgendes: Un DLL enthält en ihrem Encabezamiento una Liste el en ihr exportierten Características con el Einsprungadressen. Yo nehme por lo tanto a, daß GetProcAdress encima el Handle el DLL en esta Liste zugreift.

Saludo
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
28.03.2007  
 




Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

3.550 Views

Untitledvor 0 min.
Ernst30.04.2014
gerd17.02.2013
Untitled22.03.2012
Christian Hahn14.12.2011

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie