AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Begrifferklärung und Dateiheaderfragen

Ein Thema von fringer · begonnen am 15. Mär 2018 · letzter Beitrag vom 15. Mär 2018
Antwort Antwort
fringer

Registriert seit: 25. Feb 2018
15 Beiträge
 
#1

Begrifferklärung und Dateiheaderfragen

  Alt 15. Mär 2018, 11:41
Hallo ich wußte nicht so recht wie ich das Thema nennen soll, deswegen entschuldigt den wirren Thread-Titel.

Ich habe in letzter Zeit in einigen Foren und Forenbeiträgen immer mal den Begriff "Magic Numbers" gelesen
und wollte einmal fragen was das genau ist. Dabei geht es nicht direkt um Delphi sondern allgemein um das Programmieren.
In einem Beitrag meinte mal jemand das es "verpönt" sei Magic Numbers in seinem Code zu verwenden.
Da ich das so noch nie gehört habe wollte ich mal Fragen was man darunter versteht.

Und dann habe ich noch einmal eine Frage zum Aufbau von Dateien. Eine Datei hat ja meistens einen Header.
Ich habe gelesen das in diesem Header sogenannte "Sections" stehen. Nun meine Frage dazu: Kann man ohne weiteres (ohne dem neu compilieren der Datei)
eine dieser Section entnehmen oder gar einfügen? Wenn ihr möchtet kann ich das ganze auch an einem Beispiel erklären,
warum mich das interessiert.

Vielleicht könnt ihr mir ja bei diesen Fragen Auskunft geben.
Vielen Dank schon mal.
fringer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#2

AW: Begrifferklärung und Dateiheaderfragen

  Alt 15. Mär 2018, 11:46
https://de.wikipedia.org/wiki/Magische_Zahl_(Informatik)
https://en.wikipedia.org/wiki/List_of_file_signatures

Im Prinzip ist das am Anfang von meist binären Dateien oft eine 2-4 Byte lange Kennung/Kennzahl.
Es ist eine kurze Kennung/Beschreibung für etwas Bestimmtes, wo man an der Stelle keinen "aussagefähigen" Bezeichner angeben will oder kann.

Oft nimmt man da irgendwelche CHARs "PE" Portable Execute (EXE und DLL) oder "PK" Packed? (ZIP).
Manchmal auch ascii-codierte nummerische Werte.



Diese "Nummern" werden nicht nur zur Kennung von Dateiypen, sondern auch von Datei-/Speicher-Blöcken verwendet.
z.B. die Sektionen innerhalb einer ZIP (Verzeichniseinträge, Blöcke der einzelnen Dateien usw.)
FastMM hat am Anfang seiner Blöcke eine Kennung, um zu schnell erkennen, dass es von ihm verwalteter Speicher ist.


Magic-Numbers im Code sind schon OK, aber du solltest sie als Konstante definieren und Verwenden.
Er meinte wohl, dass es verpönt ist diese Nummern direkt zu nutzen, also z.B. Komponente.Tag = 1 (Status A) und Komponente.Tag = 2 (Status B).


Und hier ein bissl Lesestoff zu den PE-Headern:
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
https://en.wikipedia.org/wiki/Portable_Executable
https://wiki.osdev.org/PE

http://www.delphibasics.info/home/de...ormat-overview
http://www.swissdelphicenter.com/de/...de.php?id=1302
https://www.delphi-treff.de/tipps-tr...pe-format-ist/
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (15. Mär 2018 um 12:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Begrifferklärung und Dateiheaderfragen

  Alt 15. Mär 2018, 11:49
Beziehst du dich da auf PE-Files? Falls ja, dann ist das nachträgliche Hinzufügen einer Section meistens ohne Probleme möglich. Das Entfernen geht auch, unterliegt allerdings einigen Beschränkungen. Generell ist beides aber nicht trivial.

In einem Beitrag meinte mal jemand das es "verpönt" sei Magic Numbers in seinem Code zu verwenden.
Das bezieht sich denke ich auf eine andere Art von "magic numbers":

Als magic numbers bezeichnet man auch abfällig die Verwendung von numerischen Werten, für die eigentlich Konstanten definiert sind. Schaust du dir z.b. die MSDN-Library durchsuchenMessageBox Funktion an:
Delphi-Quellcode:
// Korrekter Aufruf
MessageBox(0, 'Text', 'Caption', MB_ICONWARNING);

// Magic numbers
MessageBox(0, 'Text', 'Caption', 48);
Funktioniert beides wunderbar, da MB_ICONWARNING als 0x00000030L (hex), also 48 (dec) definiert ist; Problem ist allerdings die Lesbarkeit des Codes. Man sieht auf den ersten Blick nicht, woher diese ominöse "48" jetzt herkommt - anders bei der Konstante.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (15. Mär 2018 um 11:51 Uhr)
  Mit Zitat antworten Zitat
fringer

Registriert seit: 25. Feb 2018
15 Beiträge
 
#4

AW: Begrifferklärung und Dateiheaderfragen

  Alt 15. Mär 2018, 12:17
Vielen Dank für die schnellen Antworten.

Alles klar, ich denke ich habe beide Sachen im Zusammenhang mit Magic Numbers schon einmal gelesen.
Also werden einmal die ersten Bytes in gewissen Dateien zur Kennung als Magic Numbers bezeichnet, und einmal nicht aussagekräftige Konstanten.
Das könnte man also fast schon damit vergleichen wenn jemand in seinem Code für seine Variablen immer nur a, b, c und so weiter verwendet.
Ok, wieder etwas gelernt.

Bei der Frage zu dem Header geht es nicht direkt um PE Files. Ich will es aber mal erklären.

Ich habe eine Datei mit Header, meistens haben diese Dateien immer am Ende ihrer Dateigröße 20000kb für eine eingebette Ressource zur Verfügung.
Nun kann es manchmal sein das diese Ressource aber vergessen wurde.
Daher habe ich mal versucht manuell diese Ressource hinten an die Datei hinzugefügen. Das klappt auch. Die Datei ist nicht beschädigt.
Aber die Datei erkennt trotzdem die neu "angehangene" Ressource nicht, weil diese nicht im Header (als Section) deklariert ist.
Meine Theorie war daher mal zu probieren diese Section (aus einer anderen Datei bei der die Ressource dabei ist) in den Header einzufügen und damit auf diese Ressource zu verweisen damit sie erkannt wird und ohne die Datei unbrauchbar zu machen.
Ich hoffe ich habe das nicht zu unmständlich geschrieben. Ist auch alles erstmal nur Theorie und vielleicht geht es auch nicht.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Begrifferklärung und Dateiheaderfragen

  Alt 15. Mär 2018, 12:28
Das liegt nicht am Header sondern intern am Code.
Eingebundene Resourcen werden mit ID's verwaltet die das Programm kennen muss und auch intern darauf zugreift.
Eine neue Resource einbinden ist kein Problem aber dem Programm beibringen sie zu nutzen, das geht nicht (soweit ich weiß).

Nachtrag falls ich es falsch verstanden habe:
Teste doch mal mit ResourceHacker o.ä. ob das Ziel deine neue Resource annimmt und beim Programm-Aufruf auch darauf zugreift.
Wenn das der Fall ist, ist dein Problem im nu erledigt.
Gruß vom KodeZwerg

Geändert von KodeZwerg (15. Mär 2018 um 12:33 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:10 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