Thema: Delphi Speicherzugriffsfehler

Einzelnen Beitrag anzeigen

derula

Registriert seit: 16. Mär 2008
11 Beiträge
 
Delphi 7 Personal
 
#1

Speicherzugriffsfehler

  Alt 16. Mär 2008, 02:00
Moin.

Ich habe gerade einen immer wieder rekonstruierbaren Fehler, der scheinbar nicht in meinem Code auftritt.

Wiefolgt: meine DLL (im folgenden als "ich" bezeichnet) exportiert eine Initialisierungs- und eine Deinitialisierungsfunktion. Die Anwendung (im folgenden "es", nicht von mir entwickelt) ruft die eine beim Starten, die andere beim Beenden auf. So weit, so gut.

Nun kommt es aber manchmal, dass Es meine Deinit. auch zur Laufzeit aufruft und später wieder die Init. Das funktioniert immer noch. Aber danach ruft es eine weitere Funktion meiner DLL auf. Die läuft durch, kann ich im Debugger schrittweise verfolgen. Er kommt bis zum abschließenden "end;" dieser Funktion. Klicke ich nun nochmal auf Einzelschritt, kommt folgender Fehler:

Zitat:
access violation at 0+0012fb96: read of address 0x00120001
und ein "CPU"-Fenster tut sich auf. Ich habe mit IDA einen Debug-Trace angefertigt, ab dem letzten möglichen Source-Haltepunkt (denke ich zumindest, es müsste die retn-Anweisung der zugehörigen Funktion sein) bis zu der Exception:

Code:
00001D10 CODE:HarmonyInitWave+44         retn                HarmonyInitWave returned to rpg2000.exe:0050C457
00001D10 rpg2000.exe:0050C457            retn                returned to Stack[00001D10]:0012FB94
00001D98                                                      ST0= 1.041310961582891512e-2504 ST1= 0.0 ST2= 8.0616745606685941392e-2505 ST3= 3.5949607961044423618e3498 ST4= 0.0 ST5= 1.0 ST6= 1.0 ST7= 4.8770310000000001828e6 CTRL=1372 CS=1B DS=23 ES=23 FS=3B GS=0 SS=23 EAX=12FAC4 EBX=BE26E4 ECX=FFFFFFFE EDX=DA2240 ESI=BEFCA8 EDI=BEDF28 EBP=12FADC ESP=12FAD4 EFL=200282
00001D98 CODE:HarmonyInitWave+37         retn                ESP=12FAD8
00001D98 CODE:HarmonyInitWave:loc_DA222F mov al, [ebp+var_1] EAX=12FA01
00001D98 CODE:HarmonyInitWave+42         pop ecx            ECX=1000000 ESP=12FADC
00001D98 CODE:HarmonyInitWave+43         pop ebp            EBP=12FB5C ESP=12FAE0
00001D98 CODE:HarmonyInitWave+44         retn                ESP=12FAE4
00001D98 CODE:HarmonyInitWave+44         retn                HarmonyInitWave returned to rpg2000.exe:0050C457
00001D98 rpg2000.exe:0050C457            retn                ESP=12FAE8
00001D98 rpg2000.exe:0050C457            retn                returned to Stack[00001D98]:0012FB94
00001D98 Stack[00001D98]:0012FB94        aam 0FDh           EAX=120001 SF=0
00001D98 0012FB96                                             EFL=210302 TF=1 RF=1
Kann damit jemand etwas anfangen? Ich nämlich nicht.

Wenn man bei geworfener exception in Delphi das Programm weiterlaufen lässt kommt wieder derselbe Fehler an derselben Stelle. Lässt man es ohne Debugger laufen, beendet sich einfach die Host-Anwendung. Die Deinitialisierungsmethode gibt alle in der Init. createten Resourcen wieder frei. (Wenn man beide Funktionen komplett leert, tritt derselbe Fehler auf.)

Ich hoffe mir kann jemand hier helfen. Wenn ihr mehr Informationen braucht, sagt bescheid.
  Mit Zitat antworten Zitat