Deutsch
Forum

XPSE umgewandelte HeaderCalls sind schneller!

 
Geschwindigkeitsvergleich vorkompilierter Code.
KompilierenMarkierenSeparieren
 $H windows.ph
cls
declare t&
t&=&gettickcount

whileloop 10000

    ~setpixel(%hdc,&loop,0,0)

wend

print &gettickcount-t&
waitkey
end
Ohne XPSE: 360ms, mit XPSE 220ms.

@Roland: XPSE schickt an XProfan folgenden umgewandelten Code:
KompilierenMarkierenSeparieren
Nichts desto trotz hab ich in aktueller V0.1.6c noch einen Bug - zwar nicht im Bezug auf Headerfiles - aber im Bezug auf das Erkennen von Unitbefehlen innerhalb von Klassendefinitionen. Aber darum kümmere ich mich wohl morgen...
 
10.10.2006  
 



Michael war so nett und hat den Xpse -Test auch einmal durchgeführt.

Hier seine Results:

328ms mit xpse
594ms ohne xpse

1891ms mit xpse interpreter
2297ms ohne xpse interpreter

Ich habe soebend auch mal Okrea  auf den neuen XPSE angepasst - und den code etwas umgeschrieben. Das Ganze Programm läuft IMHO besser ab - wirkt stabiler und macht einen saubereren Eindruck.

Ich glaub da hatte ich zur Abwechslung auch mal ne gute Idee.
 
29.10.2006  
 




Michael
Wodrich

Ich glaub da hatte ich zur Abwechslung auch mal ne gute Idee


Ohne diese ständige Abwechslung wäre dieses Forum auch nicht das was es nun einmal ist.

Einfach TOP

Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
29.10.2006  
 




Jörg
Sellmeyer
Ich habs auch mal getestet:
Interpreter:
Apifunktion: 1422
Call: 1222

Compiliert
Api: 290 - 300
Call: 200 - 210

Sehr interessante Entdeckung.

iF
Ich glaub da hatte ich zur Abwechslung auch mal ne gute Idee.


Wurde ja auch mal Zeit!
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
29.10.2006  
 




Jac
de
Lad
Heißt das jetzt, das Def ... langsamer ist als das XPSE-Gedöns (also ohne jegliche Deklaration und Verheaderung)?
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
29.10.2006  
 




Jörg
Sellmeyer
Nö, geDeft wird ja auch bei Davids Variante. Er weist nur den deklarierten Funktionen gleich eine feste Einsprungadresse (? oder wie heißt es? Funktionhandle?) zu und die wird dann durch Call anscheinend schneller angesprochen.
Gruß
Jörg
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
29.10.2006  
 




Jac
de
Lad
@iF: Defst du das Call-Dingens jedes mal neu, wenn XPSE was erkennt? Und was ist, wenn der Programmierer das Call-Dingens schon selbst im Quelltext definiert hat?
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
29.10.2006  
 



Nein XPSE Deft nix.

Erklärung was ich im Nachfolgenden mit ApiCall meine: Aufruf einer Api welche in einem Headerfile deklariert ist.

Wenn Roland einen ApiCall umwandelt - so tut er dies über External.

Wenn XPSE einen ApiCall umwandelt - so tut er dies über Call. XPSE macht sich da sehr viel mühe - deklariert ganz zum Anfang des Programmes entsprechende Variablen zur Aufnahme der Funktionsadressen aus den DLLs, holt sich zum Programmanfang die Funktionsadressen und wandelt die ApiCalls in Calls um welche die entsprechenden Funktionsadressen tragen.

Dieses Posting zeigt es doch ganz deutlich:  [...] 

Und hier mal der Block des neuen Okrea:
KompilierenMarkierenSeparieren
Und so eine umgewandelte Zeile sieht dann z.B. so aus:
KompilierenMarkierenSeparieren
call(__cf5&,_HWND&,-12,call(__cf6&,0,32649))
war mal:
SetClassLongA(_hwnd&,-12,LoadCursorA(0,32649))

Und natürlich deklariert XPSE nix doppelt - und auch nur die Apis welche tatsächlich genutzt werden.

Da man die Angabe von Headerfiles nun sogar gänzlich weglassen kann ist der Vorgang des Kompilierens auch noch deutlich schneller - also nicht nur das Programm läuft besser sondern...

Verstanden?
 
29.10.2006  
 



iF
Wenn XPSE einen ApiCall umwandelt - so tut er dies über Call. XPSE macht sich da sehr viel mühe - deklariert ganz zum Anfang des Programmes entsprechende Variablen zur Aufnahme der Funktionsadressen aus den DLLs, holt sich zum Programmanfang die Funktionsadressen und wandelt die ApiCalls in Calls um welche die entsprechenden Funktionsadressen tragen.


Eine Mühe, die sich auszahlt.
Wer viel mit Headern und API, umgeht erhält zum Geschwindigkeitsvorteil noch eine verbesserte Sicherheit hinzu - denn es ist nicht mehr möglich, APIs über das Ändern der Exporttables wärend des Laufens des Prozesses zu hooken.

Das bedeutet genau:
APIs die mittels DEF und EXTERNAL angesprochen werden, ermitteln die anzuspringende Adresse in der DLL erst, wenn die Funktion im Quelltext aufgerufen wird. Durch Ändern des Headers der DLL in der der API angesprochen wird (ändern im Speicher meine ich), ist es möglich den CALL auf eine eigene DLL umzuleiten und die Parameter abzugreifen. Bei einer Codierung eines Freischaltungscodes für eine Shareware könnte das schon etwas problematisch sein.
Da XPSE die Adressen beim Starten des Programmes schon festlegt, nützt eine solche Attacke nichts mehr - es werden trotzdem die richtigen Adressen angesprungen.
 
29.10.2006  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

3.906 Betrachtungen

Unbenanntvor 0 min.
Ernst07.05.2016
funkheld15.12.2013
gerd12.01.2013
iF18.04.2012
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie