AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi XE's DCP format: Auslesen einiger Basisinformationen
Tutorial durchsuchen
Ansicht
Themen-Optionen

Delphi XE's DCP format: Auslesen einiger Basisinformationen

Ein Tutorial von Memnarch · begonnen am 6. Mai 2015 · letzter Beitrag vom 20. Sep 2022
 
hathor
(Gast)

n/a Beiträge
 
#2

AW: Delphi XE's DCP format: Auslesen einiger Basisinformationen

  Alt 6. Mai 2015, 12:26
Wozu brauchst Du Kenntnisse über DCP-Files?

Vielleicht kannst Du mit folgenden Zeilen was anfangen...
Ein DCP-File beginnt mit MagicBytes.

Delphi-Quellcode:
Delphi Compilied Package (vv. 2.0-8.0,2005-2010,XE1-XE7), Kylix (vv. 1.0-3.0)(DCP.rfh):
Class: Executable and Object, Status: Guess Work, Last change: 09.02.2015 12:54:12

data
  0x0000 array[4]of Char Magic

%$IF (Magic='PKG4');
//Delphi3.0 package
const
  Ver=4;
descr ('Borland Delphi 3.0 package file.')
%$ELSIF (Magic='PKG5');
//Delphi5.0 package
const
  Ver=5;
descr ('Borland Delphi 5.0 package file.')
%$ELSIF (Magic='PKG6');
//Delphi6.0 package?
const
  Ver=6;
descr ('Borland Delphi 6.0 package file?')
%$ELSIF (Magic='PKG7');
//Delphi6.0 7.0 package
const
  Ver=7;
descr ('Borland Delphi 6.0 or 7.0 package file.')
%$ELSIF (Magic='PKG9');
//Delphi 2005 package
const
  Ver=9;
descr ('Borland Delphi 2005 package file.')
%$ELSIF (Magic='PKX0');
//Delphi 2006 MSIL and later versions package
const
  Ver=10;
descr ('Borland Delphi 2006 MSIL package file.')
%$ELSE
assert 0; //fail
%$END

%$IF not defined MSIL;
const
  MSIL=0;
%$END


descr (NL,
  'Info Src: Partially reconstructed by me (Alexei Hmelnov (mailto:alex@monster.icc.ru)).',NL)

type

PUnitData ^TUnitData near=ulong
TUnitData struc
  ulong Magic
  ulong FileSize
  raw[] at &@.Magic; Data
ends:[@:Size=@.FileSize]

TUnitInfo(NXX) struc
  PUnitData pData
  ulong F
  ulong FT
  ulong bplCode//bplOfs0
 %$IF Ver>4; //Not checked for D4
  ulong bplBSS //bplOfs1
 %$END
  ulong bplData
 %$IF (Ver>=9)or MSIL;
  ulong X
 %$END
  array[@:NXX] of ulong XX
  PChar Name
 %$IF Ver>=9;
  PChar Name1
 %$END
ends:autoname=('unit_',@.Name);

TUnitTbl(Cnt,NXX) array[@:Cnt]of TUnitInfo(@:NXX)
PUnitTbl(Cnt,NXX) ^TUnitTbl(@:Cnt,@:NXX) near=ulong

type
TDCPHdr(NXX) struc
 %$IF MSIL;
  ulong X0
 %$END
  long nRequires
  long nContains
  ulong SzContains
  PUnitTbl(@.nContains,@:NXX) pContains
  ulong Flags
 %$IF Ver>5; //Not checked for D6
  ulong Sz2
  ulong szBplName
 %$IF MSIL;
  ulong X1
  ulong X2
 %$END
 // array[@.szBplName+1]of Char,<0; BplName
  PChar BplName
 %$IF MSIL;
  PChar BplVer
 %$END
 %$ELSE
  PChar BplName
  word X
  byte Y
 %$END
  array[@.nRequires] of PChar Requires
ends

%$IF (Ver>=10);
 //They forgot to change the DCP signature when the format was changed in Delphi XE,
 //so we have to detect the size by other means
 %$IF MSIL;
 const
   NXX=6;
 %$ELSIF DataAt(4,TDCPHdr(5)).pContains^:Size=DataAt(4,TDCPHdr(5)).SzContains;
 const
   NXX=5;
 %$ELSE
 const
   NXX=8;
 %$END
%$ELSE
const
  NXX=0;
%$END

data

0x0004 TDCPHdr(NXX) Hdr

Geändert von hathor ( 6. Mai 2015 um 22:05 Uhr)
  Mit Zitat antworten Zitat
 


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