Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Über Programm eine exe verändern!? (https://www.delphipraxis.net/88824-ueber-programm-eine-exe-veraendern.html)

neo_polo 21. Mär 2007 16:52


Über Programm eine exe verändern!?
 
hallo miteinander,

Ich habe vor ca einer woche zum ersten mal delphi ausprobiert und bin jetzt ziemlich fasziniert davon.
Hab mir schon unzählige informationen von hier geholt, mal ein herzliches dankeschön dafür. :thumb:

Eigentlich wäre mein Programm soweit voll funktionsfähig, aber ich würde es trotzdem gerne ein wenig erweitern.

Meine Frage:

Ist es möglich einzelne Zeilen in einer exe Datei zu verändern?
So ähnlich wie es mit ini's möglich ist.


Bevor antworten kommen wie ich wollte etwas cracken oder so, erkläre ich wieso ich das benötige.

In der Firma wo ich arbeite stehen einige CNC Maschinen.
Bei allen CNC Programmen ist es möglich einzelne Benutzerkonten einzurichten, damit sich die Arbeiter nicht gegenseitig die CNC Programme verändern.
Bis auf dieses eine nervige Programm für das ich mein Programm geschrieben habe.
Bis jetzt habe ich die exe von Hand mit einen Debuger verändert.
Das heisst in der Exe steht in ca 10 Zeilen wo die CNC Programme gespeichert und abgerufen werden sollen, und diese habe ich nun verändert und für jeden eine eigene exe erstellt.
Mein programm schreibt jetzt nur ein paar ini's um, verschiebt eine exe und startet dann das programm.

Ich gehe mal davon aus, das diese veränderung nicht wirklich gegen das urheberrecht verstösst, oder so? :gruebel:

Egal, ich möchte jetzt mein programm so erweitern, das ich keine exe mehr verschieben muss, sondern sie an Ort und Stelle bearbeiten kann.


Vielen Dank schonmal für eure hinweise.


Grüsse
neo_polo

Reinhard Kern 21. Mär 2007 17:58

Re: Über Programm eine exe verändern!?
 
EDIT Jelly: Quote entfernt. Den ganzen ersten Beitrag nochmals zu zitieren macht nun wirklich keinen Sinn.

Hallo,

soweit ich das verstehe, willst du String-Konstanten ändern. Ich habe zwar auch schon mit dem Debugger Software "eingedeutscht", wenn es keine andere Möglichkeit gab, aber die Technik ist heute doch etwas weiter fortgeschritten und es gibt zahlreiche Gründe, Parametrisierungen nicht direkt in der EXE vorzunehmen, ich führe bloss mal Verständlichkeit und Wartbarkeit auf. Das Urheberrecht käme nur ins Spiel, wenn es sich um Strings handelt, die jemand anders geschrieben hat.

Ich würde das Problem unter allen Umständen im Sourcefile lösen. Wenn du die Unterschiede schon nicht in eine Ini-Datei auslagern, sondern im Programm selbst verankern willst, dann mach eben eine Reihe von Konstanten und jage das Ganze für jeden User durch den Compiler. Eine von zahlreichen Möglichkeiten ist bedingte Kompilierung:

Delphi-Quellcode:
{$DEFINE User1}
...
const
{$IFDEF User1}
  UserPath = 'C:\CNC\USER1';
{$ENDIF}
{$IFDEF User2}
  UserPath = 'C:\CNC\USER2';
{$ENDIF}
Damit kommt dann auch jemand klar, der dein Programm in 20 Jahren pflegen muss.

Gruss Reinhard

[edit=Jelly] Mfg, Jelly[/edit]

neo_polo 21. Mär 2007 18:13

Re: Über Programm eine exe verändern!?
 
das programm ist ja auch nicht von mir, das Programm ist speziell für diesen Maschinentyp und gibts dazu.
Das heisst es ist auf einem Win98 PC der an der maschine angeschlossen ist.

Leider ist es nicht möglich das irgendwie anders zu lösen.

bitsetter 21. Mär 2007 18:58

Re: Über Programm eine exe verändern!?
 
Hallo,

mit einem TFileStream könntest du andere Dateien editieren.

Delphi-Quellcode:
Type TText= record
  Text1, Text2: string[10];//Beispiel
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  FileStream: TFileStream;
  Text: TText;
  Pfad: AnsiString;
begin
  Pfad:= 'C:\Project1.exe';
  ZeroMemory(@Text, SizeOf(Text));
  if FileExists(Pfad) then
  begin
    FileStream:= TFileStream.Create(Pfad, fmOpenReadWrite);
    try
      FileStream.Position:= 100;//Beispiel Leseposition
      FileStream.Read(Text, SizeOf(Text));
       // Text.Text1:= .... weiterverarbeiten
      FileStream.Position:= 100;//Leseposition
      if FileStream.Write(Text, SizeOf(Text))= SizeOf(Text) then
        Showmessage('fertig');
    finally
      FileStream.Free;
    end;
  end;
end;

grenzgaenger 21. Mär 2007 22:13

Re: Über Programm eine exe verändern!?
 
geht klassisch mit seek und 'ner typsierten datei. ich leg mal 'n beispiel dazu... den rest solltest du aus der hilfe bekommenn..
Delphi-Quellcode:
var
 f: file of byte;
 i: integer;
 c: byte;
begin
 assign(f, 'test.txt');
 rewrite(f); //datei erstellen
 c := byte('i');
 for i := 0 to 100 do //was zum test reinschreiben
  write(f,c);

 //ab hier fängts an
 seek(f,30);
 c := byte('X');
 for i := 0 to 3 do
  write(f,c);
 close(f);
end.

neo_polo 21. Mär 2007 22:52

Re: Über Programm eine exe verändern!?
 
danke für die hilfe, werde es sobald ich dazu komme ausprobieren.

alzaimar 22. Mär 2007 06:51

Re: Über Programm eine exe verändern!?
 
Wenn er die EXE verändert will, würde sich da nicht ein Resourcen-Editor anbieten? Also: Resourcen extrahieren, bearbeiten, wieder einbinden?

mkinzler 22. Mär 2007 06:58

Re: Über Programm eine exe verändern!?
 
Ich würde auch vorschlagen die Ressourcen in eine Dll auszulagern, deren Inhalt man dann einfach austaucshen/erweitern kann.

Vjay 22. Mär 2007 09:46

Re: Über Programm eine exe verändern!?
 
Die Exe ist doch nicht von ihm, wie soll er die da in eine DLL auslagern... :gruebel:

Also bei den letzten zwei Posts frage ich mich, ob ihr die Anforderungen überhaupt gelesen habt :stupid:. Nicht böse gemeint, vielleicht auch falsch verstanden.

Ich habe es so verstanden, er möchte eine bestehende EXE durch sein Programm patchen und ausführen, da dieses Programm keine Profile unterstützt, sondern nur mit default-Werten arbeitet. Er hat nun vor eine art Profil-Wrapper zu basteln, welcher das Programm an den User anpasst.
Wenn diese Strings sich von der Länge nicht verändern sollte es kein Problem sein, diese per Filestream zu modifizieren. Wenn nicht, wird es etwas kniffliger.

neo_polo 22. Mär 2007 10:14

Re: Über Programm eine exe verändern!?
 
Zitat:

Zitat von Vjay
Ich habe es so verstanden, er möchte eine bestehende EXE durch sein Programm patchen und ausführen, da dieses Programm keine Profile unterstützt, sondern nur mit default-Werten arbeitet. Er hat nun vor eine art Profil-Wrapper zu basteln, welcher das Programm an den User anpasst.
Wenn diese Strings sich von der Länge nicht verändern sollte es kein Problem sein, diese per Filestream zu modifizieren. Wenn nicht, wird es etwas kniffliger.

Du hast den nagel vollkommen auf den kopf getroffen :)
Genau das will ich.

Nein die länge muss ich nicht verändern, die länge des ordnernamens auf den zugegriffen wird, muss einfach (DATA_P) 6 Zeichen betragen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr.
Seite 1 von 2  1 2      

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