Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Quellcode des Programms in Delphi übersetzen - Hilfe gesucht (https://www.delphipraxis.net/57926-quellcode-des-programms-delphi-uebersetzen-hilfe-gesucht.html)

KSebi 28. Nov 2005 20:31


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:
        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)
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.

Sollte diese Sprahe nicht ganz klar sein, dann hier nochmal das gleiche als VBASIC

Delphi-Quellcode:
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
Also ich würde mich seeeeeeeehr darüber freuen, wenn mir jemand den code umschreiben könnte.
Vielen Dank schonma im Vorraus!!!

Viele Grüße

Airblader 28. Nov 2005 20:37

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:

http://www.delphipraxis.net/dpX_faq_...?faq=Q_10#Q_10
Mit Fragen, die sich lesen wie "...ich habe weder Ahnung noch Lust, kann mir mal einer mein Programm schreiben..." wirst Du hier nicht auf Gegenliebe stoßen. Wir sind gerne bereit, jedem zu helfen, der selber Engagement zeigt - aber wir machen nicht die Hausaufgaben Anderer.
Zudem ist es unerläßlich, daß Du Dich selber mit dem Problem befasst hast, bevor Du in der Lage bist, dazu eine präzise Frage zu stellen.
Etwas völlig Anderes ist es natürlich, wenn Du (noch) nicht weißt, wonach Du suchen sollst, bzw. wo Du anfangen sollst. Dann frage gerne nach geeigneten Stichworten.
Daher die Frage:
Womit hast du konkret ein Problem beim Umschreiben?

air

KSebi 28. Nov 2005 20:44

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:
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
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.

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

Oxmyx 29. Nov 2005 08:30

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
Das ist kein Assembler, das sind ganz gewöhnliche Variablen.

DevilsCamp 29. Nov 2005 08:36

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
Und eine 1:1 Übersetzung des Assembler-Codes aus dem PureBASIC Quelltext...

KSebi 29. Nov 2005 11:21

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 ^^

Daniel Schuhmann 29. Nov 2005 11:32

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:
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;
Daniel

KSebi 29. Nov 2005 17:08

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

KSebi 29. Nov 2005 18:46

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

KSebi 29. Nov 2005 19:19

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:
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 1: Und zwar wie schaffe ich es, dass Delphi dieses Xor berechnen kann, denn im Moment bricht er ab?
Frage 2: Wie wandel ich den Wert dann in en Hex-Wert um?


Schonma vielen Dank.

tigerman33 29. Nov 2005 20:51

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
Mit dem Dollarzeichen kannst du genau das erreichen was du willst.
Nach der Zuweisung a := $10 steht dann in a der Wert 16 (nämlich genau hexadezimal 10) :)

//edit:
Beitrag umformuliert. Puh, hatte ich eine Grütze geschrieben... :pale:

KSebi 30. Nov 2005 15:37

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
Ok vielen Dank!

Habe jetzt Frage 1 auch schon rausgefunden und danke für das $ für Hex ^^

So ich probiers jetzt nochma aus :D

Vielen Dank für alle Antworten.

cöö

KSebi 30. Nov 2005 15:57

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
ok leider doch noch kein erfolg.

das mit dem $-Zeichen will nicht so ganz.

meinevariable := $zahl; // Dann erhalte ich folgende Fehlermeldung: [Fehler] Unit1.pas(59): E2066 Operator oder Semikolon fehlt

meinevariable ist ein integer
ich habe auch mal string ausprobiert geht aber auch nicht.

Was für ne Variable brauch ich denn, um ein HEX-Wert aufzunehmen?

Danke schonma ^^

ichbins 30. Nov 2005 16:06

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
eine Integer-Variable. Du kannst das Dollarzeichen weglassen. Mach
Delphi-Quellcode:
meinevariable:=integer(zahl);

KSebi 30. Nov 2005 16:13

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
so also mein aktueller quellcode:

Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
  i,cha:integer;
  serial:string;
  neu:integer;

const
  hexes:array[0..15] of char=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');

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
    cha := integer(Edit1.Text[i]); {Get char }
    asm
    MOV eax,cha
    XOR eax,201527
    ADD eax,3735928559
    IMUL eax,eax, 1638
    SUB eax,464370355
    SHL eax,3
    XOR eax,3545092109
    ADD ebx,eax
    MOV neu,ebx
    end;
  end;

  {Hier muss EBX noch in einen HEX-Wert geändert werden}
  serial := hexes[neu div 16]+hexes[neu mod 16];
  Edit2.Text := serial;
end;                        {if}
end;                        {Procedure}

end.
Hab mir das mitm hex wo anders hier im Forum abgeschaut.

DOCH: Nun kann ich den Code zwar ausführen, wenn ich in das proggy dann aber einen namen eingebe, bricht das proggy mit nem fatalen Fehler ab. Findet hier jemand den Fehler?

Ich weiß derziet net weiter.

Schonma danke

ichbins 30. Nov 2005 16:20

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
Zitat:

Delphi-Quellcode:
 serial := hexes[neu div 16]+hexes[neu mod 16];

muss das nicht heissen
Delphi-Quellcode:
 serial := inttostr(hexes[neu div 16])+inttostr(hexes[neu mod 16]);
was ist denn hexes? ist das auch eine Variable? mein Delphi kennt die nicht...


ACHSO, du hast eine
Delphi-Quellcode:
const hexes:string='0123456789ABCDEF'
[edit]

soweit bin ich schon dass er immer in der zweiten wiederholung beim Auslesen des Chars aus dem Edit abschmiert.

KSebi 30. Nov 2005 16:27

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
ja nur hexes is halt bei mir en array kein string- denk aber, dass die umwandlunk funktionieren sollte.

Oder nicht? also leider noch keine Lösung gefunden.

ichbins 30. Nov 2005 16:30

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
du musst den Edit1.text schon am Anfang in eine Variable einlesen. Auf die greifst du dann zu:

Delphi-Quellcode:
var
  i,cha,neu:integer;
  serial,s:string;

const
  hexes:string='0123456789ABCDEF';
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}
  s:=edit1.text;
  for i:=1 to length(Edit1.Text) do
  begin
    cha := integer(s[i]); {Get char }
    asm
      MOV eax,cha
      XOR eax,201527
      ADD eax,3735928559
      IMUL eax,eax, 1638
      SUB eax,464370355
      SHL eax,3
      XOR eax,3545092109
      ADD ebx,eax
      MOV neu,ebx
    end;
  end;

  {Hier muss EBX noch in einen HEX-Wert geändert werden}
  serial := hexes[neu div 16]+hexes[neu mod 16];
  Edit2.Text := serial;
end;                        {if}
end;
jetzt gibt es noch eine AV weil deine Hex-Umwandlungs-Prozedur nur für Zahlen unter 256 geht.

Zur Hex-Umwandlung kannst du diese Proc verwenden:
Delphi-Quellcode:
function hextostr(hex:int64):string;
const
  hexes:string='0123456789ABCDEF';
var
  hextmp:int64;
  kn:boolean;
begin
  hextmp:=hex;
  kn:=false;
  result:='';
  if hextmp<0 then begin
    hextmp:=-hextmp;
    kn:=true;
  end;
  if hextmp=0 then begin
    result:='0';
    exit;
  end;
  while hextmp<>0 do begin
    result:=hexes[1+(hextmp mod 16)]+result;
    hextmp:=hextmp div 16;
  end;
  if kn then result:='-'+result;
end;
diese Funktion habe ich gerade selbst gebastelt. Müsste funktionieren für Zahlen zwischen +9223372036854775808 und -9223372036854775807.

aufdieselbe Art kannst du auch dein eigenes inttostr schreiben: einfach 16 durch 10 ersetzen und fertig.

KSebi 30. Nov 2005 16:35

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
ok also jetzt bleibt der debugger doch bei der hexumwandlung stecken, nachdem ich edit1 gleich am anfang einlesen lasse. dafür schonmal danke! :)

Und hast ja auch gesagt, dass diese Umwandlung nur bis zu nem best. Wert funktioniert.

Also wie kann ich dann große Zahlen in Hex umwandeln lassen?

Schonma danke für die Antwort ;)

tigerman33 30. Nov 2005 16:43

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
Gibt es nicht bei Delphi eine Routine StrToHex oder so ähnlich? In die andere Richtung (Zahl in Hex-String umwandeln) ist ja schließlich auch eine dabei.

PS: Das mit dem Dollarzeichen funktioniert nur bei Zahlen, die du direkt im Quellcode eingibst. Deinem Computer ist es nämlich egal, ob du eine Zahl als Ganzzahl, Hexadezimal oder Binär interpretieren willst--der Wert ist immer der gleiche, nur die Formatierung ändert sich. Und die ist dem Computer egal, ihn interessiert nur der Wert.

ichbins 30. Nov 2005 16:45

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
// meine Antwort im Post oben

als nächstes hängt er sich bei der Ausgabe im Edit2 auf :roll:

:wall:

:wall:

:wall:

du kannst die Ausgabe aber auch per
Delphi-Quellcode:
showmessage(hextostr(neu));
machen.

Hudel1965 30. Nov 2005 16:47

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
Hi :)

versuchs mal so :

serial:=Format('%x',[neu]);

Gruß

Hudel

KSebi 30. Nov 2005 16:53

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
ja also jetzt geht ja schonmal alles bis auf die ausgabe, die is nochn bissel blöde.

sollte dann halt doch in edit2 stehen. :/

Also wenn wer noch ne Idee hat - ich bin dran interessiert ^^

Und danke an ichbins und an Hudel1965 :D

Mal sehn obs heut noch fertig wird ;)

KSebi 30. Nov 2005 20:04

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
Liste der Anhänge anzeigen (Anzahl: 1)
So also ich habe es geschafft ^^

War eigentlich ganz simpel ^^

Statt
Delphi-Quellcode:
Edit2.Text := var;
habe ich nun das geschrieben:
Delphi-Quellcode:
Form1.Edit2.Text := var;
Und schon keine Errors mehr - PS: das mit dem
Delphi-Quellcode:
Format('%x',[var]);
is super, schön, dass Delphi das hat, braucht man keine eigene Funktion mehr dafür ;)


An dieser Stelle noch einmal vielen Dank an alle Helfer.
Proggy is fertig - zwar is es eher nutzlos, weil es nur zu testzwecken geschrieben wurde, aber es funzt, und das war die Aufgabe ^^

Also viiiiiiiiiielen Dank an alle!

PS: Ich mach fertige Datei einfach ma in Anhang ;)
PPS: Auch wenns niemand braucht ^^ hehe

ichbins 30. Nov 2005 20:47

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
wow...

wie machst du das mit der Grafik?

KSebi 1. Dez 2005 17:16

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
Hi ichbins,

also das mit der grafik is nix weiter als ein Formular ohne border. Da hab ich einfach en Image, das ich in Photoshop erstellt habe draufgeklatscht also mitm TImage oder wie das dingens da heißt ^^ Ja das is es eigentlich auch.

Ja und wie du wohl bemerkt hast, kann man da noch nix verschrieben, das hab ich noch net gemacht :/ kommt aber noch ^^

Daniel Schuhmann 1. Dez 2005 17:44

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
Zitat:

Zitat von KSebi
Ja und wie du wohl bemerkt hast, kann man da noch nix verschrieben, das hab ich noch net gemacht :/

Delphi-Quellcode:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
const
  SC_DRAGMOVE = $F012;
begin
  if Button = mbLeft then
  begin
    ReleaseCapture;
    Form1.Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0);
  end;
end;
:-D

Daniel

KSebi 2. Dez 2005 14:09

Re: Quellcode des Programms in Delphi übersetzen - Hilfe ges
 
Hehe :D cool,

vielen vielen Dank an Daniel Schuhmann ^^

Diese procedure ist wirklich nützlich.
Super und nochma danke, dass du sie hier gepostet hast ^^

So ist das Proggy doch viel netter ^^ *freu*

Also nochmal vielen Dank für all eure Hilfen und Tipps ^^

Super community ;)

Tschööö


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz