Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Assembler Rücksprungadresse ändern (https://www.delphipraxis.net/189092-assembler-ruecksprungadresse-aendern.html)

totti14 2. Mai 2016 22:22

Assembler Rücksprungadresse ändern
 
Hallo,
ich versuche gerade ein uraltes D2 Prog unter D2007 neu zu compilieren.
Allerdings klemmt es an folgenden ASM Code und von ASM habe ich Null Ahnung:

Delphi-Quellcode:

procedure SaveErrRet;
// sets RetAddr to address after next call.
begin
  asm
    POP  EAX
    MOV  Sav_ESP, ESP
    PUSH EAX
    ADD  EAX, 5
    MOV  RetAddr, EAX
    MOV  Sav_EDI, EDI
    MOV  Sav_ESI, ESI
    MOV  Sav_EBP, EBP
    MOV  Sav_EBX, EBX
  end;
  SavHeapPtr:= HeapPtr;
end;

procedure ShowError;
begin
  HeapPtr:= SavHeapPtr;
  SaveError;
  Asm
    MOV  EBX, Sav_EBX
    MOV  EBP, Sav_EBP
    MOV  ESI, Sav_ESI
    MOV  EDI, Sav_EDI
    MOV  EAX, RetAddr
    PUSH EAX          //  sollte jetzt wieder ins Main springen nach RetAddr
  end;
end;

procedure TestError;
begin
  ShowError;
end;

// -------- Main --------
begin
 // .......
 SaveErrRet;
 // 1.)
 // tu was ganz tief
 // ......
 TestError;  
 // ......
end.
Das gibt heute eine Access violation :(
Wie macht man das heute ?

Danke Totti

BUG 2. Mai 2016 23:09

AW: Assembler Rücksprungadresse ändern
 
Zitat:

Zitat von totti14 (Beitrag 1337316)
Wie macht man das heute ?

Das sieht nach einem selbstgebasteltem Exceptionmechanismus aus (vgl. setjmp/longjmp) :shock:
Heute nimmt man Exceptions um aus solchen tiefen Verschachtelungen in die Fehlerbehandlung zu springen.

totti14 2. Mai 2016 23:16

AW: Assembler Rücksprungadresse ändern
 
Hallo BUG,
bei einen Exception springt er aber nicht an Pos 1. im Code sondern in meine Excpetion Prog ?

BUG 2. Mai 2016 23:32

AW: Assembler Rücksprungadresse ändern
 
Naja, zur Not erstmal:
Delphi-Quellcode:
done := false;
// 1.
while not done do
try
// tu etwas ganz tief
done := true;
except
// gonna catch them all
end;
TestError;
Nicht schön, aber selten :stupid:

Du solltest dann aber noch gucken, was es mit dem HeapPtr auf sich hat.

totti14 2. Mai 2016 23:49

AW: Assembler Rücksprungadresse ändern
 
Ähm der Exception passiert ja in TestError bzw. ganz weit unten und das liegt ja nicht in dem try except.
Ich versuche das ganze mal umzustellen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz