| |
|
|
- page 1 - |
|
Frank Abbing | un kleines Tool de mir sur API-Hooking la base. dans einer Listbox volonté alle Dlls aufgelistest, qui justement de Programmen geladen wurden.
simple Exe starten et ensuite irgendwelche Programme starten. en Dlls devrait maintenant gelistet volonté et es pieps kurz. s'il te plaît testet la fois, si es encore irgendwo hakt. |
|
|
| |
|
|
| |
|
- page 4 - |
|
|
RGH | hé, hé, Frank, cela était oui aussi plutôt comme Gag gedacht.
Beides hat arrêt sa Vorteile: dynamisches ou bien statisches Linken.
et je widerspreche oui pas, qui statisches Linken plus rapide ist. qui Hauptgrund pour ist mais, qui beim dynamischen Linken avant dem Call plan un GetProcAdress notwendig ist, qui beim statischen linken wegfällt. (c'est oui aussi un Grund, weshalb, qui OpenGL-DLL pour qui XProfan-eigene OGL-Funktion dans XProfan statisch gelinkt sommes. cela ging naturellement seulement, weil chacun XProfan-fähige Version Windows OpenGL soutenu.)
Beides läßt sich aussi avec XProfan programmieren: KompilierenMarqueSéparation $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 cela statische Linken trop simplifier, pourrait on naturellement une zusätzliche Funktion einbauen, etwa:
GetWText& = GetLibAddr(User32.DLL, GetWindowTextA)
Salut 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
je pourrait mir présenter, dass là GetProcAdress sous Umständen viel plus Zeit usé.
Sag je doch!
deux ..., un idée!
Salut 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 ▲ |
|
|
|
|
| quoi je avec cela dire voulais: si je cela im Augenblick richtig vois, teilt Windows qui Handles dans verschiedene Kathegorien sur - et speichert qui aussi unterschiedlich ab (Kernel-, GDI-, Userhandles...). Handles sur geladene DLL wirst du pas sous den Kernelhandles finden; qui volonté alors (oui c'est ca so comment Handles sur Speicherbereiche) gesondert behandelt. si je cela richtig vois, doit mais chez GetProcAdress sous Umständen jusque 1000 verschiedene Pointer durchgesehen volonté... |
|
|
| |
|
|
|
RGH | |
|
| 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 |
comme Untermauerung qui Vermutung, qui ~GetProcAdress plus Zeit kostet:
Oooch Roland. la hâte mais pas beachtet, cela on im Programme GetProcAdress() pro Funktion seulement EINMAL benutzen muss. Zum Sauver qui Adresse suffisant ensuite une simple Variable. Dein Code allez entier am Thema vorbei, sodass dein comparaison mächtig hinkt...
si je cela im Augenblick richtig vois, teilt Windows qui Handles dans verschiedene Kathegorien sur - et speichert qui aussi unterschiedlich ab (Kernel-, GDI-, Userhandles...). Handles sur geladene DLL wirst du pas sous den Kernelhandles finden; qui volonté alors (oui c'est ca so comment Handles sur Speicherbereiche) gesondert behandelt. si je cela richtig vois, doit mais chez GetProcAdress sous Umständen jusque 1000 verschiedene Pointer durchgesehen volonté...
oui, si du es richtig voyons würdest. la hâte du dir den Quellcode la fois angesehen? je hab reingesehen... cela hat avec cela mais rein gar rien trop 1faire. je sagte bereits, GetProcAdress ist seulement einmal pro Funktion nötig. avec cette technologie ist es pas nötig Daueraufrufe trop produzieren, comment Roland es derzeit pouvoir. Dass Profancodes effizienter fonctionnement volonté peut, zeigt XPSE plus que deutlich. la hâte du cela aussi la fois getestet, Roland? je denke - non. Hab deinen Code un kleines un peu modifiziert et maintenant funktioniert il so, comment WhichDlls es dargelegt hat. là sieht es rabenschwarz aus pour deine technologie. qui Geschwindigkeitszuwachs avec statischer Adresse beträgt 100 Prozent, ist alors doppelt so vite... KompilierenMarqueSéparation hehe |
|
|
| |
|
|
|
| cela erinnert mich doch très à den xpse-Selbsttest: [...]
je trouve cela Zeigt déjà très oui c'est ca den Geschwindigkeitsunterschied.
je trouve cela XProfan de maison aus cet xpseTechnik mitbringen sollte - et gebe Frank droite avec cela si il meinte cela XProfan ici dans den meisten Fällen völlig übertrieben et unnötig qui Funktionsadresse chaque la fois récente ermittelt ou bien gar qui DLL avec LoadLibrary magasin veux. Wofür soll cela bien son? |
|
|
| |
|
|
|
RGH | Frank Abbing
Oooch Roland. la hâte mais pas beachtet, cela on im Programme GetProcAdress() pro Funktion seulement EINMAL benutzen muss. Zum Sauver qui Adresse suffisant ensuite une simple Variable.
Oooch Frank, la hâte Du pas beachtet, qui mon erstes Programme GetProcAdress() aussi seulement einmal aufruft et cela zweite seulement en supplément dient, den Zeitaufwand entre GetProcAdress() et LoadLibrary() trop comparer, à déterminer, qui beim dynamischen Aufruf qui Zeit verbrät?
si je dans XProfan cela dynamische Linken bevorzuge, ensuite doit je qui Adresse ensuite bestimmen, si le Funktion cela erste la fois verwandt wird. si vous ensuite à anderer Stelle im Programme wieder verwandt wird, doit je vous wieder bestimmen ou bien je devrait dans einer Tabelle nachsehen, si qui bereits bekannt (et encore gültig) ist et vous ensuite verwenden. cela wäre zusätzlicher Verwaltungsaufwand.
l'autre Alternative ist qui Umwandlung dans une statischen Aufruf, so comme qui XPSE (et mon obiges Beispiel) pouvoir. là cela chez zeitkritischen Dingen Sinn faire peux, habe je oui bereits vorgeschlagen, cela dans qui prochain XProfan-Version comme Alternative einzubauen. Comme je le disais: beide Varianten avons ses avant- et Nachteile.
Salut 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 |
et cela zweite seulement en supplément dient, den Zeitaufwand entre GetProcAdress() et LoadLibrary() trop comparer, à déterminer, qui beim dynamischen Aufruf qui Zeit verbrät?
comment déjà dit - am Thema vorbei.
Es liegt mir loin dir quelque chose vorschreiben trop voulons et j'aime solche Diskussionen aussi gar pas. tu as ici une Possibilité qui Effizienz de XProfan encore trop steigern. quoi du letztendlich daraus fais, et si et comment du qui Kritik deiner User umsetzt, ist deine l'affaire. |
|
|
| |
|
|
|
| allô Roland...
la fois trop deinem Code: peux es son, dass du là quelque chose mogelst? Usedll mais est un statischer Aufruf et GetProcAdress - wird cela là pas dynamisch aufgerufen??? |
|
|
| |
|
|
|
| allô Frank...
la hâte du dir den Quellcode la fois angesehen? je hab reingesehen... cela hat avec cela mais rein gar rien trop 1faire.
suis alles autre comme un Experte pour ASM. quoi mach qui Code de GetProcAdress car oui c'est ca? Durchsucht qui pas den Table pour qui angegebenen Funktion? Lerne volontiers quoi en supplément. |
|
|
| |
|
|
|
| wohin liegt qui Denkfehler dans folgendem Code: KompilierenMarqueSéparation $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
|
|
|
| |
|
|
|
RGH | Andreas Hötker
quoi mach qui Code de GetProcAdress car oui c'est ca? Durchsucht qui pas den Table pour qui angegebenen Funktion?
c'est arrêt une API-Funktion, qui qui absolute Adresse einer Funktion eines geladenen Moduls zurückgibt. comment vous cela fait, entzieht sich meiner Kenntnis. là Microsoft sa Quellcodes (weitestgehend C et C++ avec ASM-partager) pas veröffentlicht, ist es aussi pas entier simple cela herauszubekommen. (Aussi serait cela eh pas weiterhelfen.) je vermute mais simple folgendes: une DLL contient dans ihrem En-tête une liste qui dans son exportierten Funktionen avec den Einsprungadressen. je prends daher à, qui GetProcAdress sur cela Handle qui DLL sur cet liste zugreift.
Salut 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 ▲ |
|
|
|