![]() |
Quellcode des Programms in Delphi übersetzen - Hilfe gesucht
Einen schönen guten Abend an die Delphi Gemeinde hier.
Und zwar habe ich hier ein Programmquellcode, der einen Serial berechnet. Anfolgend würde ich gerne den vom Programm erstellten, mit der Benutzereingabe abgleichen. Das Problem ist, dass der Quellcode in PUREBASIC geschrieben ist. Zudem sind Assembler Anweisungen enthalten. Ich hoffe, dass es hier jemden gibt, der mir helfen kann, den Programmteil so umzuschreiben, dass dieser in Delphi funktioniert. Hier nun also der PUREBASIC code:
Delphi-Quellcode:
Ich hoffe, dass ihr diesen Assembler code versteht, denn ich habe so meine Probleme. Sollte es auch ohne Assembler code gehen ok, hätte aber gerne diese Schreibweise, da ich den code dann besser nachvollziehen kann.
uName.s = GetGadgetText(#txtName) { uname wird die eingabe des Textfeldes Name zugewiesen}
tempChar.l nameLen.b = Len(uName) {Länge von uname wird ermittelt} Debug maxLen If nameLen<3 {wenn länge kleiner 3 ist ...} SetGadgetText(#txtSerial,"Name Too short") ElseIf nameLen>=50 SetGadgetText(#txtSerial,"Name Too Long") Else {bis hier hin ist es noch ganz klar, aber ab jetzt unklar} XOR eax,eax XOR ebx,ebx For i = 1 To nameLen tempChar = Asc(Mid(uName,i,1)) MOV eax,tempChar XOR eax,201527 ADD eax,3735928559 IMUL eax,eax, 1638 SUB eax,464370355 SHL eax,3 XOR eax,3545092109 ADD ebx,eax Next MOV serial, ebx serial = Hex(serial) SetGadgetText(#txtSerial,serial) Sollte diese Sprahe nicht ganz klar sein, dann hier nochmal das gleiche als VBASIC
Delphi-Quellcode:
Also ich würde mich seeeeeeeehr darüber freuen, wenn mir jemand den code umschreiben könnte.
Dim EAX,EBX 'Declaring Variables (With no specific Type however Double would be an Ideal type)
Dim i As Integer 'Counter 'check name length If(Len(txtName.text)<3) Then txtSerial.Text = "Name Too short" Exit Sub 'Like a return statement.. End If 'Begin Algo For i = 1 to len(txtName.text) EAX = Asc(Mid(txtName.text,i,1)) 'Get char EAX = EAX Xor 201527 'Note This might not work with big numbers (Xor) EAX = EAX + 3735928559 EAX = EAX * 1638 EAX = EAX - 464370355 EAX = EAX * (2^3) 'SHL EAX, 3 ... EAX * 8 .. SHL is the same as EAX * 2^N EAX = EAX Xor 3545092109 EBX = EBX + EAX Next i 'End Algo txtSerial.Text = Hex(EBX) 'Note this will probably cause an overflow in VB Vielen Dank schonma im Vorraus!!! Viele Grüße |
Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
Ich zitiere mal den Verhaltenskodex (der für dieses Beispiel wohl etwas zu extrem formuliert ist, der Sinn bleibt jedoch der selbe)
Zitat:
Womit hast du konkret ein Problem beim Umschreiben? air |
Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
ok ich möchte ja kein komplettes programm es geht mir um die funktion.
Delphi-Quellcode:
So also ich würde mal sagen, dass das Assembler code ist. Mit Assembler habe ich allerdings nicht sehr viel zu tun, versteh aber zumindest was hier geschieht.
For i = 1 to len(txtName.text)
EAX = Asc(Mid(txtName.text,i,1)) 'Get char EAX = EAX Xor 201527 'Note This might not work with big numbers (Xor) EAX = EAX + 3735928559 EAX = EAX * 1638 EAX = EAX - 464370355 EAX = EAX * (2^3) 'SHL EAX, 3 ... EAX * 8 .. SHL is the same as EAX * 2^N EAX = EAX Xor 3545092109 EBX = EBX + EAX Next i 'End Algo txtSerial.Text = Hex(EBX) 'Note this will probably cause an overflow in VB Also ich weiß nur nicht, wie ich diesen Assemblercode so umschreiben kann, dass dieser in Delphi funktioniert. Wenn mir jemand sagn kann, wie das geht wär ich sehr glücklich ^^ Danke schonmal :D |
Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
Das ist kein Assembler, das sind ganz gewöhnliche Variablen.
|
Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
Und eine 1:1 Übersetzung des Assembler-Codes aus dem PureBASIC Quelltext...
|
Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
ja mein letzter post enthält ja auch die version, die ich nicht gerne hätte, sondern die Assembler Version.
Kann mir hier bitte jemand schreiben, wie ich Assembler code in Delphi verwenden kann? Also bitte anhand des Beispiels, das ganz am Anfang steht. Schonma Danke ^^ |
Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
Assemblercode leitest Du einfach nur durch das Schlüsselwort asm ein und schließt durch end; ab, das geht in ganz normalen Prozeduren.
Dazu ein Beispiel aus der OH:
Delphi-Quellcode:
Daniel
function Sum(X, Y: Integer): Integer;
begin Result := X + Y; end; // Das ganze in Assembler: function Sum(X, Y: Integer): Integer; stdcall; begin asm MOV EAX,X ADD EAX,Y MOV @Result,EAX end; end; |
Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
ok vielen Dank für deinen Beitrag.
Das ist genau das, was ich gerne gewusst hätte. Also vielen Dank :D |
Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
Hi,
hab doch noch einmal eine Frage: Und zwar weiß ich nicht, wie die geeigneten Funktionen in Delphi heißen für: tempChar = Asc("a") Und zwar ist das Visual Basic und die Funktion Asc wandelt a in eine Intergerzahl um. 2. serial = Hex(123854) Schonmal vielen Dank PS: Hab die Funktionen leider nicht gefunden in der Delphi Hilfe :( THX |
Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
So also hab schonma rausgefunden wie ichn char in en interger bekomme.
Hier mal mein derzeitiger Quellcode:
Delphi-Quellcode:
Frage 1: Und zwar wie schaffe ich es, dass Delphi dieses Xor berechnen kann, denn im Moment bricht er ab?
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var i:integer; EAX,EBX:real; serial:string; begin {Procedure} if length(Edit1.Text) < 3 then Edit2.Text := 'Der Benutzername ist zu kurz!' else if length(Edit1.Text) > 50 then Edit2.Text := 'Der Benutzername ist zu lang!' else begin {if} for i:=1 to length(Edit1.Text) do begin EAX := integer(Edit1.Text[i]); {Get char } {EAX := EAX Xor 201527; }<---------------------------- Frage 1 EAX := EAX + 3735928559; EAX := EAX * 1638; EAX := EAX - 464370355; EAX := EAX * (2*2*2); {EAX := EAX Xor 3545092109; }<---------------------- Frage 1 EBX := EBX + EAX; end; {Hier muss EBX noch in einen HEX-Wert geändert werden}<------------- Frage 2 serial := FloatToStr(EBX); Edit2.Text := serial; end; {if} end; {Procedure} Frage 2: Wie wandel ich den Wert dann in en Hex-Wert um? Schonma vielen Dank. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz