AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Assembler Rücksprungadresse ändern

Ein Thema von totti14 · begonnen am 2. Mai 2016 · letzter Beitrag vom 2. Mai 2016
Antwort Antwort
totti14

Registriert seit: 26. Mai 2005
Ort: Bremen
90 Beiträge
 
Delphi 10.3 Rio
 
#1

Assembler Rücksprungadresse ändern

  Alt 2. Mai 2016, 22:22
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

Geändert von totti14 ( 2. Mai 2016 um 23:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

AW: Assembler Rücksprungadresse ändern

  Alt 2. Mai 2016, 23:09
Wie macht man das heute ?
Das sieht nach einem selbstgebasteltem Exceptionmechanismus aus (vgl. setjmp/longjmp)
Heute nimmt man Exceptions um aus solchen tiefen Verschachtelungen in die Fehlerbehandlung zu springen.
  Mit Zitat antworten Zitat
totti14

Registriert seit: 26. Mai 2005
Ort: Bremen
90 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Assembler Rücksprungadresse ändern

  Alt 2. Mai 2016, 23:16
Hallo BUG,
bei einen Exception springt er aber nicht an Pos 1. im Code sondern in meine Excpetion Prog ?
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#4

AW: Assembler Rücksprungadresse ändern

  Alt 2. Mai 2016, 23:32
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

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

Geändert von BUG ( 2. Mai 2016 um 23:38 Uhr)
  Mit Zitat antworten Zitat
totti14

Registriert seit: 26. Mai 2005
Ort: Bremen
90 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Assembler Rücksprungadresse ändern

  Alt 2. Mai 2016, 23:49
Ä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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 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