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?