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)