Deutsch
Bugs und vermeintliche

FreeProfan Bugs und vermeintliche

FreeProfan32 und API UpdateResource

 
- Seite 1 -



Matthias
Arlt
Bei der Fehlersuche in einem meiner Programme ist mir aufgefallen, dass ein schreibender Zugriff mit "UpdateResource" auf die Runtime (bzw. Interpreter) regelmäßig die Datei unbrauchbar macht. Soweit ich herausgefunden habe, oder dies jedenfalls annehme, wird der Schreibvorgang zwar ausgeführt, aber die Änderung nicht im Header eingetragen... Dies führt dann beim Startversuch der Datei zu unterschiedlichen Fehlermeldungen. Meist "Nur ein Teil der ReadProcessMemory- oder WriteProcessMemory-Anforderung wurde abgeschlossen" oder "Falscher Parameter...".
Es betrifft auch ausschliesslich FreeProfan, die XProfan-Versionen sind von diesem Effekt nicht betroffen.

Gruß Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
10.04.2016  
 



 
- Seite 2 -



Matthias
Arlt
Aber ich bin der Sache schon ein Stück näher gekommen. Die Ursache für die Verschiebung liegt darin begründet, dass bei FreeProfan 3 Sektionen fehlen. Das sind .tls,.rdata und .reloc
Diese liegen bei XProfan unmittelbar vor .rsrc
Bei FreeProfan ist ein Teil des Platzes den diese Sektionen einnehmen würden mit Auffüll-Nullen besetzt, um das FileAlignment (mod 512) zu gewährleisten. Die API kümmert sich um diese Nullen nicht und interpretiert den Platz als frei.
Das Einfachste wäre nun, entweder eine Sektion dieser Größe als Dummy einzufügen oder die bei FreeProfan vor .rsrc liegende .edata um diesen Betrag zu vergrößern. Also natürlich nur den Größen-Eintrag im Header.

Gruß Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
20.04.2016  
 




Matthias
Arlt
So, ich hab das jetzt mal gemacht. Alles scheint optimal zu funktionieren.
Es reicht demnach aus, in der originalen Runtime die Größe von .edata zu erhöhen, damit kein Platz zwischen .edata und .rsrc bleibt...

Nach weiteren Tests kann ich sagen, es scheint nicht nur zu funktionieren, sondern tut es auch zuverlässig !

Zum Nachvollziehen:
bei (long(runtime#,60) + 124) [Diese Adresse ist immer gleich] steht die Größe von .edata, nämlich $C8. Diesen Wert um die Differenz zu .rsrc (also um 312) erhöhen, dort also $200 eintragen.

Das Gleiche dann nochmal bei (.edata + 8) und bei (.edata + 16)

Das wars auch schon... für FreeProfan32.

Wie das bei 64 aussieht, kann ich nicht testen. Das FileAlignment beträgt dort jedenfalls (mod 1024), womit sich die Differenzwerte dementsprechend ändern...

Gruß Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
20.04.2016  
 




RGH
Danke! Das werde ich gleich mal ausprobieren!

Aber wieso trägt das der FreePascal-Compiler nicht gleich so ein? So muss ich nach jedem Compile-Vorgang die entstandenen EXE-Dateien (Ok, beim Compiler ist es nicht nötig) patchen, damit sie korrekt funktionieren. Da werde ich mir wohl ein kleines XProfan-Progrämmelchen schreiben müssen ...

Gruß
Roland
 
XProfan X3
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
20.04.2016  
 




RGH
EDIT: Da muss ich mich eben vertippt haben! Beim zweiten Versuch klappt es jetzt. Sorry!

Gruß
Roland

FALSCHMELDUNG von vorhin:
Also ich habe jetzt in der PRFRUN32.EXE an diesen drei Stellen die Bytefolge $C8 $00 (= $00C8) durch $00 $02 (= $0200) ersetzt. Erfolg: Die EXE ist gleich unbrauchbar!
 
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
20.04.2016  
 




Matthias
Arlt
Na wunderbar. Nun muss es nur noch bei 64 klappen...
Du kannst ja den Kompiler im 'winexecwait' laufen lassen und wenn er fertig ist, den Patch ausführen.

Gruß Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
20.04.2016  
 




Michael
W.
C:\FPC\fpc-3.0.0\compiler\systems\t_win.pas
wäre die Stelle im FreePascal-Compiler wo die Daten gewurstelt werden.

Vielleicht läßt sich ja daran etwas drehen.
 
Alle Sprachen
System: Windows 8/10, XProfan X4
Programmieren, das spannendste Detektivspiel der Welt.
20.04.2016  
 




Matthias
Arlt
Wäre 'ne Möglichkeit. Aber ob es die einfachere ist...?
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
20.04.2016  
 




Michael
W.
Sieht schwer aus, wäre dann aber für 86/64.

Evtl wird es dort auch nur generiert und es muss in den asm86 asm64 Unterbereichen geändert werden.

Bin zu müde...
(evtl. ist das auch schon in der JediLib verbessert, wer weiß)
 
System: Windows 8/10, XProfan X4
Programmieren, das spannendste Detektivspiel der Welt.
20.04.2016  
 




Matthias
Arlt
Ich würde den Compiler erstmal nicht verändern. Man kann den ja wohl mit verschiedenen Optionen aufrufen...und erschafft sich dann evtl. weitere Macken...
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
21.04.2016  
 




Matthias
Arlt
Was FreeProfan64 angeht, so kann ich es zwar nicht testen, habe mir aber trotzdem mal die Binary unter die Lupe genommen.

Hier liegt vor .rsrc nicht .edata, sondern .idata

Der erste zu ändernde Wert liegt an Offset (long(runtime#,60) + 148) [bei 64bit auch immer an dieser Stelle]. Dort wäre $6000 einzutragen.
Die anderen beiden Offsets wären (.idata + 8) und (.idata + 16)
Bei (.idata + 8) wären auch wieder $6000 einzutragen.
Allerdings differieren bei FreeProfan64 die virtuelle Größe und die Rohdaten-Größe. Bei den Rohdaten, also an (.idata + 16) wären es demnach nur $5800. Ansonsten sollte die Vorgehensweise identisch sein...
Sollte es nicht auf Anhieb klappen, einfach mal an allen 3 Offsets mit beiden Werten, $6000 oder $5800, experimentieren. Oder besser nur an den ersten 2 Offsets, denn bei (.idata + 16) dürfen es ja maximal $5800 sein.

Etwas erstaunt war ich übrigens, dass bei FreeProfan64 die Runtime auch mit Prfrun32 benannt ist....

Gruß Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
21.04.2016  
 




RGH
Vielen Dank für Deine Mühe! Das werde ich dann demnächst mal austesten!

Matthias Arlt (21.04.2016)
Etwas erstaunt war ich übrigens, dass bei FreeProfan64 die Runtime auch mit Prfrun32 benannt ist....


Das liegt ganz einfach daran, dass ich für 64Bit exakt den gleichen Quellcode benutze. Kleinere Unterschiede werden durch Compilerschalter erledigt. Aber damit befinde ich mich in guter Gesellschaft, wenn man so einige Dateinamen von Windows betrachtet.

Gruß
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
21.04.2016  
 




Matthias
Arlt
Nix zu danken...das war mir ein Vergnügen...und der Lerneffekt ist auch nicht zu verachten.


Aber damit befinde ich mich in guter Gesellschaft, wenn man so einige Dateinamen von Windows betrachtet.


Dem ist nichts hinzuzufügen...

Gruß Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
21.04.2016  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

66.950 Betrachtungen

Unbenanntvor 0 min.
Sven Bader16.09.2021
Rainer Hoefs12.07.2019
p.specht20.12.2018
Walter23.05.2018
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