Einzelnen Beitrag anzeigen

Poelser

Registriert seit: 21. Apr 2008
Ort: Europa
145 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Entschlüsselung von D7 auf D10.2 Tokyo portieren

  Alt 8. Okt 2020, 16:52
Funktioniert zwar immer noch nicht, aber ich bin ja nun einen Schritt weiter. Die Umstellung auf AnsiChar funktioniert jetzt mit Tokyo und Lazarus identisch.

Was nicht funktioniert, ist diese Funktion:
Delphi-Quellcode:
class procedure TTools_Crypt.CryptByte(var aByte: Byte; var CV: Word);
var
  rBX, rDX: Word;
  i: Byte;
  rBL: Byte absolute rBX;
begin
  rBX:=CV;
  for i:=1 to 8 do
  begin
    rDX:=rBX;
    rDX:=rDX shl 1;
    asm
      mov AX, rDX
      shr AL, 1
      xor AL, AH
      mov rDX, AX
    end;
    rBX:=rBX shl 1;
    asm
      mov AX, rDX
      rcr AX, 1
      mov rDX, AX
      mov AX, rBX
      rcr AX, 1
      mov rBX, AX
    end;
    rBX:=rBX shr 1;
  end;
  aByte:=aByte xor rBL;
  CV:=rBX;
end;
Vorher wird mit all den anderen Funktionen ein (verschlüsselter) String in einen Puffer geschrieben. In diesem Puffer wird Byte für Byte entschlüsselt, in CV kommt der Schlüssel rein (das was in Const Cryptval steht). Dieser Puffer wird anschliessend in den String zurückgeschrieben.

Nur zur Erinnerung: Ursprünglich funktioniert das mit D7, und auch im aktuellen Lazarus kein Problem (Lazarus braucht zusätzlich nur {$ASMMODE intel}).

Aber in Tokyo kann ich im Debugger sehen, dass im Puffer was anderes erzeugt wird, und dieser falsche Kram landet im String.

Damit ergibt sich die Frage, warum verhält sich Tokyo hier anders als Lazarus und D7?
Was muss ich ändern, gibt es hier vielleicht noch einen Compilerschalter, den mir Google nicht rausrückt? Ich verstehe von Intel-Assembler leider zu wenig
Oder gibt's in Tokyo hier 'nen Bug?

Geändert von Poelser ( 8. Okt 2020 um 17:06 Uhr) Grund: Hatte übersehen, das kann ja auch noch sein
  Mit Zitat antworten Zitat