Skip to content

Release 0.4.0 - #4

Merged
BinFlip merged 2 commits into
mainfrom
feature/v0.4.0
Oct 11, 2026
Merged

BinFlip merged 2 commits into
mainfrom
feature/v0.4.0

Conversation

@BinFlip

@BinFlip BinFlip commented Oct 11, 2026

Copy link
Copy Markdown
Collaborator

Release 0.4.0: compiled units, IDR knowledge bases and runtime-package imports, Delphi 2010+ metadata and Delphi 13 support, plus a code-quality pass over the extended RTTI readers.

  • dcu: decodes .dcu / .dcp from Delphi 2 to 13, generates export names (Borland / Itanium) and places a program's DCU declarations in its binary (DelphiBinary::locate).
  • kb: reads and writes IDR knowledge bases byte for byte, and builds them from DCUs (matches kb6 wherever the units are the same).
  • imports: names what a binary imports from runtime packages.
  • Delphi 2010+ attributes, record methods, indexed properties, unit initialization table, resource strings, interface method RTTI, structure extents.

Breaking changes are listed under Changed in CHANGELOG.md.

Capability release; see CHANGELOG.md for the full list.

- dcu: decode Delphi 2 - 13 compiled units and packages, generate
  export names (Borland and Itanium), and place a program's DCU
  declarations in its binary (DelphiBinary::locate).
- kb: read and write IDR knowledge bases byte for byte, and build them
  from DCUs the way IDR's maker did (matches kb6 from the Delphi 6
  library wherever the units are the same).
- imports/exports of runtime packages, structure extents, the unit
  initialization table, resource strings, interface method RTTI and
  Delphi 2010+ metadata (attributes, record methods, indexed
  properties); Delphi 13 detection.
- Own C++Builder 6 and Delphi 13 fixtures with build scripts; the tests
  find proprietary toolchains through UNDELPHI_* variables.
- Breaking: MethodParam, SignatureParam and RecordField are no longer
  Copy; AccessKind::Virtual holds byte offsets; C++Builder output is
  reported as Compiler::CppBuilder.
Attribute blocks are read by one strict reader, extrtti::read_attr_data,
and the classic and extended property tables by one walker.
ExtendedProperty and ExtendedField carry decoded attribute Vecs like every
other attributed item. AttributeEntry::iter_at, iter_class_attributes and
Visibility::Unknown are removed.

Indexed-property accessors resolve through DelphiExtMethod::index, so an
unreadable extended-method entry no longer shifts later indices.
AccessTarget::UnresolvedSlot keeps the full VMT byte offset.

Identifier plausibility checks go through util::as_identifier and accept
UTF-8 letters, as Delphi 2009+ writes them. DelphiBinary's extended-RTTI
accessors also skip binaries whose compiler version predates Delphi 2010.

string_layout is cached; import_at and class lookup by type info are
indexed (decode_attribute about 6x faster on HeidiSQL x64).
Layout::fits uses binary search; name_init_table output is unchanged on
every fixture. Thread-variable offsets past the TLS template are
rejected. Function doc summaries use the third person throughout.
@BinFlip
BinFlip merged commit e910452 into main Oct 11, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant