![]() |
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:
Das gibt heute eine Access violation :(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. Wie macht man das heute ? Danke Totti |
AW: Assembler Rücksprungadresse ändern
Zitat:
Heute nimmt man Exceptions um aus solchen tiefen Verschachtelungen in die Fehlerbehandlung zu springen. |
AW: Assembler Rücksprungadresse ändern
Hallo BUG,
bei einen Exception springt er aber nicht an Pos 1. im Code sondern in meine Excpetion Prog ? |
AW: Assembler Rücksprungadresse ändern
Naja, zur Not erstmal:
Delphi-Quellcode:
Nicht schön, aber selten :stupid:
done := false;
// 1. while not done do try // tu etwas ganz tief done := true; except // gonna catch them all end; TestError; Du solltest dann aber noch gucken, was es mit dem HeapPtr auf sich hat. |
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 12:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz