AGB  ·  Datenschutz  ·  Impressum  







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

Result einer Funktion in ASM auswerten

Ein Thema von Win32.API · begonnen am 25. Jun 2006 · letzter Beitrag vom 26. Jun 2006
Antwort Antwort
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#1

Result einer Funktion in ASM auswerten

  Alt 25. Jun 2006, 11:48
Hi,
wie kann man das (den?) Result einer Funktion in ASM auswerten?


Delphi-Quellcode:
function foo:String;
begin
  result := 'hello world!'
end;

asm
  mov eax, call foo
end;
geht nicht :O.




danke, win32
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Result einer Funktion in ASM auswerten

  Alt 25. Jun 2006, 11:51
Ö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).
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#3

Re: Result einer Funktion in ASM auswerten

  Alt 25. Jun 2006, 12:03
Danke fuer deine Antwort, aber wieso funktioniert das dann nicht:

Delphi-Quellcode:
asm
  call foo
  call Showmessage
end;
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: Result einer Funktion in ASM auswerten

  Alt 25. Jun 2006, 12:11
Keine Ahnung

Kuck dir doch mal an, welchen Code ShowMessage(foo()); produziert (-> CPU-Fenster), LString-Handling ist nicht simpel - vielleicht liegts daran.
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#5

Re: Result einer Funktion in ASM auswerten

  Alt 25. Jun 2006, 12:23
Hmm, so sehe ich schonmal die Message, aber ich bekomme immer noch eine AV

Delphi-Quellcode:
asm
  lea eax,[ebp-$04]
  call foo
  mov eax,[ebp-$04]
  call showmessage
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#6

Re: Result einer Funktion in ASM auswerten

  Alt 26. Jun 2006, 10:45
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#7

Re: Result einer Funktion in ASM auswerten

  Alt 26. Jun 2006, 11:13
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:
lea, eax,[ebp-$04]
call foo
mov eax,[ebp-$04]
call showmessage
(so stehts im CPU fenster)

Ich bin leider nicht so der Asm Profi , aber eigentlich muesste es doch so laufen, oder?


grueße win32
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#8

Re: Result einer Funktion in ASM auswerten

  Alt 26. Jun 2006, 11:28
Zitat von Win32.API:
[ebp-$04] lagert imho eine Variable aus ...
nein, es gibt die Position an, wo eine Stringvariable steht

Delphi-Quellcode:
var S: String;
asm
  lea eax, &S
  call foo
  mov eax, &S
  call showmessage
end;
oder selbergemacht.

Delphi-Quellcode:
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;
"string initialisieren": aber aufpassen, daß nichts anderes an dieser Position liegt, ansonsten halt ein anderes Fleckchen suchen

"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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 21:32 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