![]() |
Result einer Funktion in ASM auswerten
Hi,
wie kann man das (den?) Result einer Funktion in ASM auswerten?
Delphi-Quellcode:
geht nicht :O.
function foo:String;
begin result := 'hello world!' end; asm mov eax, call foo end; danke, win32 |
Re: Result einer Funktion in ASM auswerten
Öhm, Delphi legt seine Result, falls es Typen sind mit Größen <= 4 Byte, immer in EAX ab, also reicht ein
Delphi-Quellcode:
;)
asm
call foo end; Größere Typen, zB records, kommen auf den Stack, Fließkommazahlen verbleiben in ST(0). |
Re: Result einer Funktion in ASM auswerten
Danke fuer deine Antwort, aber wieso funktioniert das dann nicht:
Delphi-Quellcode:
:gruebel:
asm
call foo call Showmessage end; |
Re: Result einer Funktion in ASM auswerten
Keine Ahnung :gruebel:
Kuck dir doch mal an, welchen Code ShowMessage(foo()); produziert (-> CPU-Fenster), LString-Handling ist nicht simpel - vielleicht liegts daran. |
Re: Result einer Funktion in ASM auswerten
Hmm, so sehe ich schonmal die Message, aber ich bekomme immer noch eine AV :wall:
Delphi-Quellcode:
asm
lea eax,[ebp-$04] call foo mov eax,[ebp-$04] call showmessage end; |
Re: Result einer Funktion in ASM auswerten
Was versteckt sich hinter [ebp-$04]? (eine vorinitialisierte String-Variable?)
Aber mach's dir doch nicht so schwer, wenn garnichts geht, dann schreib ich einfach was in Pascal, schau wie es Delphi macht und mach's nach :zwinker: |
Re: Result einer Funktion in ASM auswerten
Danke fuer deine Antwort, ich habe geguckt wie es delphi macht und es nachgemacht:
[ebp-$04] lagert imho eine Variable aus ... SHowmessage(foo) ->
Delphi-Quellcode:
(so stehts im CPU fenster)
lea, eax,[ebp-$04]
call foo mov eax,[ebp-$04] call showmessage Ich bin leider nicht so der Asm Profi , aber eigentlich muesste es doch so laufen, oder? grueße win32 |
Re: Result einer Funktion in ASM auswerten
Zitat:
Delphi-Quellcode:
oder selbergemacht.
var S: String;
asm lea eax, &S call foo mov eax, &S call showmessage end;
Delphi-Quellcode:
"string initialisieren": aber aufpassen, daß nichts anderes an dieser Position liegt, ansonsten halt ein anderes Fleckchen suchen
var S: String;
asm mov [ebp-$04], 0 // string initialisieren lea eax, [ebp-$04] call foo mov eax, [ebp-$04] call showmessage mov eax, [ebp-$04] call StringFreigeben end; "StringFreigeben": ich weiß grad nicht wie die Funktion heißt .... schau einfach mal was bei "S := ''" gemacht wird ... die Funktion ist irgendwo in der System.pas definiert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 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 by Thomas Breitkreuz