Delphi-PRAXiS
Seite 4 von 10   « Erste     234 56     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Maschinensprache (https://www.delphipraxis.net/31751-maschinensprache.html)

Neutral General 15. Okt 2004 13:28

Re: Maschinensprache
 
Wenn ich jetzt sowas hab :

Delphi-Quellcode:
E2 21 FF 21 AC 11 7D
Kann ich das nicht mit Delphi so in eine Textdatei speichern das das ein richtiges Programm wird ?
Auch wenn das hier wahrscheinlich nichts sinnvolles ergeben würde :mrgreen:

MaBuSE 15. Okt 2004 13:59

Re: Maschinensprache
 
Zitat:

Zitat von Neutral General
Wenn ich jetzt sowas hab :
Delphi-Quellcode:
E2 21 FF 21 AC 11 7D
Kann ich das nicht mit Delphi so in eine Textdatei speichern das das ein richtiges Programm wird ?
Auch wenn das hier wahrscheinlich nichts sinnvolles ergeben würde :mrgreen:

Kein Problem:
Einfach neue Anwendung, TMemo, TEdit und TButton drauf und folgenden Quelltext ;-)
Delphi-Quellcode:
// Wandelt Hex Code in Bin Datei um
// Benötigt:
//    Memo1 mit Hexwerten
///     (z.B. Memo1.Lines.Text := 'EB 0C 68 65 6C 6C 6F 20 77 6F 72 6C 64 '+
//                                '24 BA 02 01 B4 09 CD 21 B8 01 4C CD 21';)
//    Edit1 mit Dateinamen
//      (z.B. Edit1.Text := 'C:\TEMP\TEST.COM';)
//
// written by Dr. MaBuSE
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  s: string;
  BinDatei: TextFile;
begin
  s := Memo1.Lines.Text;

  // unnötige Zeichen aus Text entfernen
  i := length(s);
  while i > 0 do
  begin
    if pos(upcase(s[i]), '0123456789ABCDEF') = 0 then
    begin
      delete(s, i, 1);
    end;
    dec(i);
  end;

  AssignFile(BinDatei, Edit1.Text);
  ReWrite(BinDatei);
  // String aus Hexwerten in Bin konvertieren
  for i := 0 to (length(s) div 2)-1 do
  begin
    Write(BinDatei, Chr(StrToInt('$'+s[i*2+1]+s[i*2+2])));
  end;
  CloseFile(BinDatei);
end;

MaBuSE 15. Okt 2004 14:03

Re: Maschinensprache
 
Oder folgende Funktion verwenden:

in der Delphi 7 Hilfedatei steht
Die Funktion konvertiert einen String mit Hexadezimalzeichen in den entsprechenden Binärwert.

Delphi-Quellcode:
function HexToBin(Text, Buffer: PChar; BufSize: Integer): Integer
Beschreibung
Mit HexToBin können Sie den Hexadezimal-String Text in den entsprechenden Binärwert umwandeln.
Text ist die String-Darstellung eines Hexadezimalwertes.
Buffer gibt den Wert in der binären Darstellung zurück.
BufSize legt die Größe von Buffer fest. Text muss auf Hexadezimalzeichen mit mindestens 2*BufSize zeigen, das jedes Hexadezimalzeichen ein Byte repräsentiert.
HexToBin gibt die Anzahl der Zeichen in Buffer zurück, die nicht verwendet wurden, das Text keine gültigen Hexadezimalzeichen enthalten hat ('0'..'f')..

Hinweis: Die Hexadezimalzahl muss Zeichen in Kleinschreibung enthalten, da HexToBind keine Zeichen in Großschreibung erkennt.

Neutral General 15. Okt 2004 14:12

Re: Maschinensprache
 
Danke aber bei Delphi 3 gibt diese Funktion leider nicht (Wie sovieles andere auch :evil: )
Wie kann ich z.B dein Hello-World Programm damit machen ?

Wenn ich in das Memo :

Delphi-Quellcode:
EB 0C 68 65 6C 6C 6F 20 77 6F 72 6C 64 24 BA 02 01 B4 09 CD 21 B8 01 4C CD 21
eingebe sieht die Exe so aus :

Delphi-Quellcode:
ë hello world$º´   Í!¸LÍ!
ist das richtig so ?
Wenn ich das Programm starte blinkt jedenfalls nur das DOS-Fenster kurz auf :(

tommie-lie 15. Okt 2004 14:40

Re: Maschinensprache
 
Zitat:

Zitat von Neutral General
Also nochmal eine blöde (?) Frage: Würde es theoretisch gehen wenn man das richtige in eine Textdatei schreibt und diese dann in .exe umbenennt, das da dann ein Programm rauskommt ?

Jein, eine Windows-EXE enthält nicht nur den MAschinencode. Die Datei muss dem PE-Format folgen, also .data- und .text-Abschnitt, diverseste Header (unter XP evtl noch ein Manifest).

Shaman 15. Okt 2004 14:50

Re: Maschinensprache
 
@tommie-lie: Er hat schon recht, wenn er das Richtige in eine Textdatei schreibt, kommt sicher ein Programm raus. Nur wird er Probleme haben, #0 zu schreiben... :wink:

Gruss
Shaman

Neutral General 15. Okt 2004 14:51

Re: Maschinensprache
 
dumme Frage #3 : Was ist #0 :mrgreen:

dizzy 15. Okt 2004 14:59

Re: Maschinensprache
 
Ich glaube, dass das gesamte Unterfangen nichts weiter als reine Zeitverschwendung würde. Sicherlich ist es sinnvoll Grundlagen zu lernen - aber in dieser Form ist's irgendwie sehr sinnlos. Selbst wenn du wüsstest dass mit #0 das ASCII-Zeichen mit dem Index 0 gemeint ist, und damit u.a. Strings abgeschlossen werden, so ist es ganz einfach viel zu viel Handarbeit. Ich spreche da aus Erfahrung - ich habe mal versucht die FPU direkt zu steuern - also mit Opcodes. Man ist dann nur noch dabei sämtliche Speicheradressen von Hand zu berechnen, und die Parameter der Opcodes in Hex, oder in diesem Fall binär zu kodieren.
Trink dir lieber ne gute Tasse Tee, da hast du im Endeffekt mehr von :D.
Der einzige Grund die CPU von Hand steuern zu wollen ist, wenn du einen kompletten Compiler von null auf selber bauen wolltest. Und selbst das wird nicht in 0/1 gemacht.

Es sei gesagt dass es theoretisch möglich ist, sich aber eigentlich jeder sinvollen Machbarkeit entzieht.

Gruss,
Fabian

Neutral General 15. Okt 2004 15:06

Re: Maschinensprache
 
Zitat:

Zitat von dizzy
Selbst wenn du wüsstest dass mit #0 das ASCII-Zeichen mit dem Index 0 gemeint ist, und ...

Das das ein ASCII-Zeichen mit dem Index 0 ist weis ich auch -.-

Trotzdem würde ich gerne wissen warum

Delphi-Quellcode:
EB 0C 68 65 6C 6C 6F 20 77 6F 72 6C 64 24 BA 02 01 B4 09 CD 21 B8 01 4C CD 21
umgewandelt in

Delphi-Quellcode:
ë hello world$º´   Í!¸LÍ!
nicht als exe-Datei funktioniert . Normalerweise müsste dann doch da 'hello world' stehen oder ? Bei mir blinkt aber nur kurz die DOS-Box und dann ist Ende... :gruebel:

PS: Das das eigentlich Zeitverschwendung ist ist mir klar, aber ich interessiere mich jetzt eben dafür und sinnvolle Programme hab ich noch selten geschrieben :mrgreen:

Shaman 15. Okt 2004 15:08

Re: Maschinensprache
 
Starte das Programm mal von der Kommandozeile aus.

Gruss
Shaman


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 Uhr.
Seite 4 von 10   « Erste     234 56     Letzte »    

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-2025 by Thomas Breitkreuz