Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ASM - Compiler erstellt überflüssigen Code? (https://www.delphipraxis.net/41070-asm-compiler-erstellt-ueberfluessigen-code.html)

jbg 25. Feb 2005 14:08

Re: ASM - Compiler erstellt überflüssigen Code?
 
Zitat:

Zitat von Dax
Ich bastele schon ein paar Wochen an einer Möglichkeit, Schreibrechte auf's Codesegment zu bekommen, bis jetzt hatte ich keinen Erfolg ;-)

Das ist doch das die leichteste Übung: VirtualProtect + WriteProcessMemory.

Dax 25. Feb 2005 14:09

Re: ASM - Compiler erstellt überflüssigen Code?
 
Die Kombination hab' ich noch nicht ausprobiert, weil VirtualProtect bei mir aus irgendeinem Grund immer fehlschlug.. Hab' wohl falsche Parameter übergeben :gruebel:

// Edit

@dizzy: Ein CALL ist ein pushen des nächsten EIPs auf den Stack und ein JMP in die angegeben Adresse. Probier mal mit meiner Funktion von oben rum, da dürfte ein Vorteil bemerkbar sein.

retnyg 25. Feb 2005 14:12

Re: ASM - Compiler erstellt überflüssigen Code?
 
Zitat:

Zitat von jbg
Zitat:

Zitat von retnyg
vielleicht verwendet er in seinem source 3 variablen vom typ byte ?

Vielleicht, aber Variablen liegen nicht im CodeSegment (Readable, not Writable, Executable), sondern im Datensegment (Readable, Writeable, not Executable). Denn was bringt einem eine nicht beschreibbare Variable? Das kann höchstens eine Konstante sein, und die liegt gewiss nicht an dieser Stelle, sondern vereint bei allen anderen Konstanten.

hmm ich habe aber schon festgestellt dass delphi an den code einer prozedur pointer auf die variablen, welche in dieser vorkommen, anhängt

Dax 25. Feb 2005 14:14

Re: ASM - Compiler erstellt überflüssigen Code?
 
Das könnte ein Hint für den Debugger sein, damit er die Variablen für die Watches und den Evaluater/Modifier findet. Wenns das nicht ist, sind diese Bytes nur für Alignment zu gebrauchen.

jbg 25. Feb 2005 14:17

Re: ASM - Compiler erstellt überflüssigen Code?
 
Zitat:

Zitat von retnyg
hmm ich habe aber schon festgestellt dass delphi an den code einer prozedur pointer auf die variablen, welche in dieser vorkommen, anhängt

Wäre mir neu. Beispiel? (=Beweis)

jbg 25. Feb 2005 14:22

Re: ASM - Compiler erstellt überflüssigen Code?
 
Zitat:

Zitat von dizzy
Also tatsächlich wirklich Alignment... ist ja nen Dingen! Hat das wirklich merkbaren Einfluss auf die Geschwindigkeit?

Ja, denn es macht einen rießen Unterschied, ob man zwei Speicherzugriffe braucht, um den nächsten Befehl zu laden, oder nur einen. Wenn die nächste Anweisung auf Adresse $0001 liegt, denn muss zuerst das DWORD von $0000-$0003 gelesen werden und dann $0004-0007. Daraus muss dann noch von $0001-$0004 das DWORD ermittelt werden. Und das geschieht auch, wenn man nur einen 1 Byte Befehl hat, da der L1/2-Cache eben auf DWORD oder sogar auf QWORD ausgelegt ist.

[EDIT]
Ich hoffe ich erzähle hier jetzt keinen Stuss. Das ist jetzt auch schon eine Weile her, das ich das gelernt und ausprobiert habe.

retnyg 25. Feb 2005 14:27

Re: ASM - Compiler erstellt überflüssigen Code?
 
Liste der Anhänge anzeigen (Anzahl: 1)
beweis: der wert den MOV an dieser Stelle in EDX schreibt ist die markierte position, welche dem string 'test' hardcoded entspricht.

dizzy 25. Feb 2005 14:40

Re: ASM - Compiler erstellt überflüssigen Code?
 
Also ließe sich (imho) folgernd feststellen:

Delphi ist so genial, dass es Code so ausrichtet, dass er möglichst performant ausgeführt wird. Die dafür nötigen Paddings nutzt er zudem für potentielle Debug-Infos, was die Sache ganz schön schlau erscheinen lässt :).

Kommt das hin?

NicoDE 25. Feb 2005 16:24

Re: ASM - Compiler erstellt überflüssigen Code?
 
Zitat:

Zitat von dizzy
[...] Die dafür nötigen Paddings nutzt er zudem für potentielle Debug-Infos, was die Sache ganz schön schlau erscheinen lässt :).

Das möchte ich bezweifeln (ohne Compiler-Quelltext habe ich keine Beweise) - ich vermute es handelt um Datenschrott aus dem Compile-Prozess. ('anderere' Compiler schreiben dort teilweise Breakpoints (int3), 0x00 oder 0x90 (nop) hin)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz