Programmabsturz nach CallFunction() verhindern

Anfängerfragen zum Programmieren mit PureBasic.
es_91
Beiträge: 410
Registriert: 25.01.2011 04:48

Programmabsturz nach CallFunction() verhindern

Beitrag von es_91 »

Hallo, also, ich bin mir jetzt nicht sicher, ob das wirklich ein Anfänger-Thema ist, aber irgendwo muss es ja rein und das könnte doch viele Anfänger auch interessieren:

Wie kann man ein Programm vor dem Abstürzen bewahren, heißt: wie kann man verhindern, dass Windows eine Absturzmeldung bringt und man stattdessen einfach weiter macht (evtl. nach Auslieferung eines Fehlercodes).

... geht das überhaupt?

Grüße,

euer es_91.
Zuletzt geändert von es_91 am 25.09.2014 19:22, insgesamt 1-mal geändert.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Nein, nein, bitte stürz nicht ab!!! (Böses CallFunction!

Beitrag von ts-soft »

Fehler, wie IMA (Invalide Memory Access) kann man nicht ignorieren. Man kann sie Abfangen und das Programm beenden,
zum Beispiel mit der OnError Lib.

Besser ist es immer solche Fehler Abzufangen, bzw. zu verhindern!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
es_91
Beiträge: 410
Registriert: 25.01.2011 04:48

Re: Nein, nein, bitte stürz nicht ab!!! (Böses CallFunction!

Beitrag von es_91 »

Ich wollte einen DLL-Betrachter schreiben, der das Ausführen von Funktionen aus der Bibliothek ohne Angabe von Parametern ermöglicht, bzw. wenn Parameter falsch angebgeben werden sollte sich das Ding nicht einfach abschießen.

Ideen? ^^
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Nein, nein, bitte stürz nicht ab!!! (Böses CallFunction!

Beitrag von ts-soft »

Da sehe ich schwartz für Dich :mrgreen:

Hab zwar schon sowas geschrieben (PureDLLHelper)
aber nicht mit der Möglichkeit die Parameter zu testen.

Mit TryCatch könnte man zwar evtl. was machen, aber das
steht dann doch auf wackligen Füssen.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
es_91
Beiträge: 410
Registriert: 25.01.2011 04:48

Re: Nein, nein, bitte stürz nicht ab!!! (Böses CallFunction!

Beitrag von es_91 »

Danke Dir.

Mein kleiner Test eben hat mir doch nen Error gebracht, als ich ne Funktion über CallFunctionFast() aufrufen wollte. Das sollte eigentlich gehen...

Kann aber auch sein, ich irre mich.

Wie dem auch sei, ich brauche vorerst keine weitere Hilfe un gehe dankend von Dannen. :mrgreen:
Benutzeravatar
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

Re: Nein, nein, bitte stürz nicht ab!!! (Böses CallFunction!

Beitrag von _sivizius »

Da die Parameter und die Rücksprungadresse über den Stack übergeben werden, führt eine falsche Anzahl an Parametern zu einer falschen Rücksprungadresse also zu einem Jump ins Nirvana. Du könntest den Stack vorher mit der richtigen Rücksprungadresse mehrmals befüllen und anschließend das Stackregister (esp bzw. rsp) mit dem vorher in den Speicher gesicherten Wert des Stackregister (esp bzw. rsp) überschreiben. Nur wenn die DLL selbst, wegen einem falschen Parameter, einen Fehler verursacht oder die Gesamtlänge aller Parameter in Byte nicht durch 4 teilbar ist, dürfte das Programm jetzt noch abstürzen...
Zuletzt geändert von _sivizius am 26.09.2014 18:39, insgesamt 1-mal geändert.
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Re: Nein, nein, bitte stürz nicht ab!!! (Böses CallFunction!

Beitrag von NicknameFJ »

@es_91:

würdest Du bitte einen aussagekräftigen Titel für diesen Thread vergeben.

Danke.
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Antworten