Einzelnen Beitrag anzeigen

Lyan

Registriert seit: 5. Aug 2011
188 Beiträge
 
#1

Funktion returned falsche Werte?

  Alt 15. Mai 2019, 05:46
Delphi-Version: 10.2 Tokyo
Heute wieder angefangen mit Delphi seit langem und schon hab ich 3 Fragezeichen auf dem Kopf.

Hier ein kleiner Ausschnitt der Funktion
Delphi-Quellcode:
function TCore.GetGlobal: DWORD64;
var
  Registers: TContext;
  Key0, Key1: DWORD64;
  Globals: array[0..20] of DWORD64;
  I: Integer;
begin
  with Registers do
  begin
    Key0 := GLOBAL_INIT_KEYS[0];
    Key1 := GLOBAL_INIT_KEYS[1];
    ConstructKeys(Key0, Key1);
    Rax := Key1;
    R8 := Process.Read64(Process.RvaToVa(GLOBAL0));
    Rdx := DWORD(R8);
    Rax := ROL(DWORD(Rax), 1) + Rdx;
    R8 := R8 shr $20;
Delphi-Quellcode:
function TProcess.Read64(AFrom: DWORD64): DWORD64;
var
  ReadCount: NativeUInt;
begin
  ReadProcessMemory(FProcessHandle, Pointer(AFrom), @Result, SizeOf(DWORD64), ReadCount);
end;
In der Funktion Read64 ist der Wert von Result eine 64-Bit Addresse und nach dem Return ist der zugewiesene Wert irgendwas anderes.

Screenshots im Anhang. Wtf?

Edit:// Okay liegt scheinbar an dem with keyword. Was zeigt mir der Debugger denn da an bei R8? Mit Registers.R8 wird es korrekt dargestellt... War einfach nur sehr verwirrend weil genau der Wert sowieso die Ursache dafür ist dass etwas in der Decryption falsch läuft und dann sah es halt so aus als ob der Grund dafür dass der Wert falsch ist die Funktion ist.

Ich wünschte man könnte wie in Visual Studio einfach global alle Werte als Hex anzeigen und ich könnte einfach über die Variablen hovern beim Debuggen, das ist ja echt zum Ktzen umständlich, Ctrl + F5, Rechtsklick Edit, "Showas Hex"... Wer denkt sich sowas aus? Yep, der Debugger spinnt komplett, bekomme einfach teilweise mal ne 32 Bit Addresse angezeigt, mal den richtigen Wert.
Miniaturansicht angehängter Grafiken
fnhfgiw.png   tzasr3e.png  

Geändert von Lyan (15. Mai 2019 um 06:33 Uhr)
  Mit Zitat antworten Zitat