AGB  ·  Datenschutz  ·  Impressum  







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

Delphi -> Asm -> Stackproblem?

Ein Thema von Gruber_Hans_12345 · begonnen am 4. Aug 2007 · letzter Beitrag vom 5. Aug 2007
 
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#1

Delphi -> Asm -> Stackproblem?

  Alt 4. Aug 2007, 16:19
Weiss jemand eine Möglichkeit den ASM - Code aus dem CPU Fenster als Text rauszubekommen?

Ich habe folgendes Problem, mein Delphi Code erzeugt mir einen komischen asm code, und ich weiss nicht warum, das resultat ist, das nach dem Aufruf der Funktion die Register, die eigentlich gesichert sein sollten falsch sind, wenn man sich den asm code anschaut, dann ist es klar, das die falsch sind, aber warum wird so ein code erzeugt?
Delphi-Quellcode:
procedure TRemoteNetworkInfo.RefreshAD;
var
    dom : IADsContainer;
    i : integer;
begin
    for i:=0 to Count-1 do Item[i].fDeleted := TRUE;

    ADsGetObject('WinNT://' + fDomainName, IADsContainer, dom);
    dom.Filter := VarArrayOf(['computer']);
    ADsEnumerateObjects(dom, AD_RefreshComputer);
    dom := nil;

    for i:=Count-1 downto 0 do
        if Item[i].fDeleted then begin
            Item[i].Free;
            Delete(i);
        end;
end;
ich habe die screenshots des CPU fensters angehängt
Speziell folgendes problem, wenn die Funktion aufgerufen wird, dann liegt die (verstekcte) variable self im EBX register
diese wird im Einstieg der Funktion auf den Stack gesichert, ABER zuvor werden in einer Schleife 9 * push $00, push $00 ausgeführt

und beim beenden der Funktion werden die Variablen (darunter auch das EBX Register) so vom Stack geladen wie wenn die 9*push $00 push $00 niemals ausgeführt worden wären

hat da jemand eine idee?




[edit]eine Lösung habe ich, um das problem zu umgehen (da ich ansonsten fehler bekommen) aber diese ist nicht wirklich soooo schön
und zwar habe ich einfach den aufruf dieser funktion gekapselt in
Delphi-Quellcode:
    asm push EBX; end;
    RefreshAD;
    asm pop EBX; end;
(wobei RefreshAD die funktion von oben ist)
Angehängte Grafiken
Dateityp: png asm_prob2_109.png (3,0 KB, 39x aufgerufen)
Dateityp: png asm_prob1_448.png (5,1 KB, 35x aufgerufen)
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
 


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 11:59 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