Einzelnen Beitrag anzeigen

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)
Miniaturansicht angehängter Grafiken
asm_prob2_109.png   asm_prob1_448.png  
Gruss Hans

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