| |
|
|
- 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 3 - |
|
|
| Büdde hierzu noch ein Wunsch, wo ihr grad an der Exe frickelt:
Das Console-Flag als Kompilerschalter!
Den Code hierzu [...] habe ich längst nicht mehr parat und weiß leider auch nicht mehr die Stelle im PE-Header. Mit dem Flag kann man ein XProfan-Konsolen-Programm in der cmd ausführen ohne das es für die eigenen Konsole-Ausgaben zwangsläufig eine neues Konsolenfenster öffnet.
Es brachte damals (wohl XProfan 9) scheinbar auch nichts durcheinander und die XProfan-Programme liefern ganz normal.
Hab hierzu grad noch einen alten Beitrag gefunden: [...] und Konsole-API [...] . |
|
|
| |
|
|
|
RGH | Sodele, jetzt habe ich (zunächst für FreeProfan32) auch den Compiler umgestrickt: Die PRC-datei wird nun als Ressource des Typs "XPRC" mit Namen "Programm" der Runtime hinzugefügt. Da sie nun nicht mehr zwingend am Ende des fertigen Programmes liegt, sondern in den Ressourcen, wird automatisch vor dem Kompilieren dem Programm die Zeile "ProgEnd" hinzugefügt, damit die Runtime auch das Ende des Kompilates erkennt.
Die Runtime habe ich zunächst nicht geändert ("Never change ...."), da die Suche ja nach dem Kompilat ja weiterhin so erfolgen kann, wie bisher. (Bei Gelegenheit werde ich das dann aber optimieren.)
Jetzt wird auch ein fertiges Programm nicht mehr durch Löschen einer Ressource unbrauchbar.
Gruß Roland
@iF: Welches Byte des Headers genau muss auf welchen Wert gesetzt werden? |
|
|
| 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 | Das fragliche Flag liegt bei Offset (long(runtime#,60) + 92). Für die Console sollte dort $3 stehen, für Window $2.
Alles weitere liegt in Rolands Hand...
Gruß Matthias |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 21.04.2016 ▲ |
|
|
|
|
Matthias Arlt | Das ist doch mal 'ne interessante Lösung...die PRC als Ressource
Gefällt mir gut! |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 21.04.2016 ▲ |
|
|
|
|
RGH | Vorerst kann man sich das ja dann bei Bedarf mit jedem Hexeditor selber patchen.
Das FreeProfan32-Paket habe ich jetzt frisch hochgeladen. Es liegt an der bekannten Adresse bereit!
Am Wochenende hoffe ich dann, Zeit zu finden, die Änderungen auch für FreeProfan64 und später dann auch für XProfan durchzuführen.
Gruß Roland |
|
|
| XProfan X3Intel 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 | Roland, was vielleicht noch zu prüfen wäre: Ob bei jedem Compiler-Durchlauf wirklich exakt die gleiche Dateistruktur erzeugt wird. Wegen der Festwerte für die Sektionsgrößen. Wenn nämlich nicht, müsste man den nötigen Differenzbetrag dann dynamisch ermitteln, was kein Problem wäre, man muss es halt nur wissen.
Ich gehe mal davon aus, dass das nicht nötig sein wird, aber sicher ist sicher...
Gruß Matthias |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 21.04.2016 ▲ |
|
|
|
|
| RGH (21.04.2016)
@iF: Welches Byte des Headers genau muss auf welchen Wert gesetzt werden?
Sorry, ich schrieb ja sinngemäß, dass ich es leider nicht mehr weiß. |
|
|
| |
|
|
|
Matthias Arlt | @iF: ich habs doch schon rausgesucht...
Das fragliche Flag liegt bei Offset (long(runtime#,60) + 92). Für die Console sollte dort $3 stehen, für Window $2. |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 21.04.2016 ▲ |
|
|
|
|
| Genau, habs nicht überlesen und mir die 92 gemerkt.
[OFFTOPIC]Roland hatte nur überlesen, dass ich sinngemäß schrieb, es im Moment nicht "auf dem Schirm" zu haben. Wäre nicht meine Art, den Wert "92" nicht auch direkt zu zitieren, wenn ich ihn denn wüsste. Insofern hatte mich Rolands Frage nur irritiert und Dich wiederum meine Antwort auf seine Frage. ^^[/OFFTOPIC] |
|
|
| |
|
|
|
Michael W. | RGH (21.04.2016)
Ressource des Typs "XPRC" mit Namen "Programm"
Ressource des Typs "XPRC" mit Namen "Programm1", "Programm2", "Programm3"
...und dann ChoiceBox oder Programmname über Parameterschalter...
Ich weiß, es ist schrecklich das jede Lösung zu neuen Wünschen (und Problemen) führt... |
|
|
| System: Windows 8/10, XProfan X4 Programmieren, das spannendste Detektivspiel der Welt. | 21.04.2016 ▲ |
|
|
|
|
Matthias Arlt | Folgendes bitte ignorieren (Fehldiagnose, weil der Kopf vom vielen Code-Durchforsten rauchte...): Hm...so interessant das zunächst schien mit der XPRC-Ressource... Ein Packen der Runtime ist dadurch aber wohl unmöglich geworden. |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 22.04.2016 ▲ |
|
|
|
|
funkheld | If kannst du bitte dein Clientprogramm als Source offenlegen ?
Danke. Gruss |
|
|
| |
|
|