Italia
Bugs und vermeintliche

FreeProfan Bugs und vermeintliche

FreeProfan32 und API UpdateResource

 

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 File unbrauchbar macht. Soweit ich herausgefunden habe, oder dies jedenfalls annehme, wird der Schreibvorgang zwar corsa, aber die Cambiamento nicht im Testata eingetragen... Dies führt dann beim Startversuch der File 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.

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




Jörg
Sellmeyer
Es wird Roland sicher helfen, wenn du da einen kleinen lauffähigen (!) Beispielcode postest.
 
XProfan X3
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
10.04.2016  
 




Matthias
Arlt
Da hast Du naturalmente recht... Ich habs mal auf das minimalst mögliche "eingedampft". Mit der Unicode-Variante bei Übergabe von Strings bin ich mir nicht mehr zu 100% sicher (deshalb im Eingangs-Beitrag entfernt).
Hinsichtlich des "Fehl-Verhaltens" macht das erstmal eh' keinen Unterschied.
declare file$,modul&,hFind&,hUpdate&
file$ = Pfad zur FreeProfan-Runtime...
modul& = external("KERNEL32","LoadLibraryExA",addr(file$),0,3)
hFind& = external("KERNEL32","FindResourceExA",modul&,2,"TOOLBAR32",0)
external("KERNEL32","FreeLibrary",modul&)

if hFind&

    print hFind&
    hUpdate& = external("KERNEL32","BeginUpdateResourceA",addr(file$),0)
    print hUpdate&
    print external("KERNEL32","UpdateResourceA",hUpdate&,2,"TOOLBAR32",0,0,0)
    print external("KERNEL32","EndUpdateResourceA",hUpdate&,0)

endif

waitkey
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
10.04.2016  
 




Matthias
Arlt
Ich habe inzwischen das Problem mal näher untersucht. Mit folgendem Ergebnis:
Der Schreibvorgang findet statt und auch die Einträge im Testata werden gesetzt bzw. aktualisiert.
Aber:
Die komplette Ressourcen-Sektion wird um einiges nach vorn verschoben (im konkreten Fall um 312 Byte). Damit stimmt naturalmente der Rohdaten-Offset im .rsrc-Testata nicht mehr. Oder richtiger, der Offset stimmt schon, was die veränderte Position angeht, nur der davor liegende Teil der File ist nunmehr zu kurz. Als Workaround verschiebe ich nun die Sektion durch Einfügen von Null-Bytes wieder komplett um den "Fehlbetrag" nach hinten und trage im Testata (.rsrc + 20) wieder den korrekten Offset ein. Wodurch es zu dieser Verschiebung kommt, ist mir allerdings noch ein Rätsel...
An der API kann es nicht liegen, die funktioniert ja bei anderen File (nicht FreeProfan) so wie sie soll.

Saluto Matthias

Nachtrag:
Die anfängliche Annahme, bei "FreePascal- oder Lazarus-Derivaten" die Unicode-Variante der API verwenden zu müssen, hat sich als gegenstandslos erwiesen...
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
19.04.2016  
 




RGH
Ein erster Versuch hat folgendes ergeben:

XProfan X3 und FreeProfan machen exakt das gleiche. Allerdings reagiert eine XProfan-Runtime auf das Löschen der TOOLBAR32-Ressource aus mir noch unerklärlichen Stabilire anders, als eine FreeProfan-Runtime! Aus einer XProfan-Runtime lässt sich die Ressource löschen und sie bleibt funktionsfähig, aus einer FreeProfan-Runtime wohl nicht.

Außerdem musste ich feststellen, dass ein gelinktes XProfan-Profan-Programm beim Löschen der Ressource auch seines Profan-Codes beraubt wird und anschließend wie eine Runtime ohne gelinkten Code funktioniert.

Ich schaue weiter ....

Saluto
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
19.04.2016  
 




Matthias
Arlt
Schon seltsam, das Ganze. Immerhin hab ich mich dadurch mal eingehender mit dem Innenaufbau der PE's beschäftigt...


...das ein gelinktes XProfan-Profan-Programm beim Löschen der Ressource auch seines Profan-Codes beraubt wird und anschließend wie eine Runtime ohne gelinkten Code funktioniert.


Das ist in etwa das gleiche Verhalten wie bei der UPX-Problematik, bevor Du die "Packer-Unterstützung" nachgerüstet hattest.

Die Komplett-Verschiebung einer Sektion lässt ja vermuten, daß die Dimensione oder das Ende des vorherigen Codes irgendwie nicht erkannt wird. Die entsprechenden Infos stehen wiederum in den einzelnen Headern. (ob auch noch an anderer Stelle ???)
Vielleicht trotzdem ein Anhaltspunkt per die weitere Cerca. Der Verhaltensunterschied FreeProfan vs. XProfan lässt sich damit aber wohl auch nicht erklären...

Immerhin versetzt mein Workaround die File wieder in einen funktionsfähigen Zustand. Bei FreeProfan jedenfalls. Eine aktuelle XProfan-Runtime zum Testen hab ich ja nicht.

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




RGH
Das Problem bei UPX war ein anderes: Da ich ein nachträgliches Ändern der Ressourcen ermöglichen wollte, gibt es keine festdefinierte Adresse in der Runtime mehr, an der das Kompilat zu finden ist, sondern ich suche nach dem Start des Programmi nach dem Testata des Kompilates. Da ich mit der Cerca aber nicht beim Dateanfang begann, sondern erst kurz vor dem Beginn der Ressourcen im unkomprimierten Programm, lief diese Cerca nach der Komprimierung ins Leere. So habe ich dann den Beginn der Cerca deutlich früher angesetzt.

BTW: Auch FreeProfan hat die neuen Ressourcen-Funktionen von XProfan X3, so dass sich Dein Programm auf folgende Zeilen reduzieren lässt:
declare file$
file$ = "prfrun32.exe"
print res("Change", file$, 2, "TOOLBAR32",0,0,0)
Print "Fertig!"
waitkey

Leider bleibt das Problem beim Löschen der Ressource bestehen.

Saluto
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  
 




Matthias
Arlt
Ich meinte das auch nur von den Auswirkungen her. Das sich das Problem an sich nicht vergleichen lässt, ist schon klar.


BTW: Auch FreeProfan hat die neuen Ressourcen-Funktionen von XProfan X3, so dass sich Dein Programm auf folgende Zeilen reduzieren lässt:


Auch das ist klar. Mir ging/geht es aber darum, daß der schreibende API-Zugriff fehlschlägt. Und das nicht nur beim Löschen, sondern generell, also auch beim Hinzufügen, Ändern etc.

Die API ist ja sozusagen der kleinste gemeinsame Nenner, der immer zur Verfügung steht, auch wenn keine neuere Profan-Version verwendet wird oder überhaupt kein Zugriff aus Profan heraus erfolgt.
ResourceHacker und Co scheinen da dann auch noch etwas anders vorzugehen oder fangen solche Effekte durch weitere Techniken ab...

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




RGH
FreePascal (Lazarus) scheint einen anderen PE-Testata zu verwenden, wie Delphi. Leider habe ich da offensichtlich keinen Einfluss darauf und auch in den Compilereinstellungen nichts dazu gefunden.

Saluto
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  
 




Matthias
Arlt
Den Verdacht mit einem anderen Testata-Aufbau hatte ich auch schon, bin aber trotz stundenlanger Cerca ebenso wenig fündig geworden.

Nachdem ich herausgefunden habe, was genau da passiert und wie das mit geringem Aufwand wieder hinzubiegen ist, ist es ja kein wirklich gravierendes Problem mehr.

Ärgerlicher ist da fast schon, daß Du auch bei XProfan solch unklare Auffälligkeit entdeckt hast...

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




Michael
W.
Das Kompilat wird gesucht...

Läßt es sich nicht als freie (selbstdefinierte) Ressource circa die Ressourcenverwaltung zu fassen bekommen?
 
Alle Sprachen
System: Windows 8/10, XProfan X4
Programmieren, das spannendste Detektivspiel der Welt.
20.04.2016  
 




RGH
Ja, die Idee trage ich auch schon eine Weile mit mir herum und werde es wohl in der nächsten Version von XProfan so halten.

Aber das ist hier ja keine Lösung, da sich die FreeProfan-Runtime (und naturalmente auch der Interpreter und presumibilmente auch andere mit FreePascal kompilierte Exen) offensichtlich nicht mit den Ressourcen-Funktionen der Windows-API bearbeiten lässt, ohne unbrauchbar zu werden. Bislang habe ich da keine Lösung gefunden.

Saluto
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  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

64.610 Views

Untitledvor 0 min.
Sven Bader16.09.2021
Rainer Hoefs12.07.2019
p.specht20.12.2018
Walter23.05.2018
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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