Почему UnitCount отличается между PackageInfoTable и TPackageTypeInfo? - PullRequest
0 голосов
/ 06 августа 2010

Если вы установите точку останова в System._StartExe и изучите передаваемую таблицу инициализации, вы заметите, что InitTable.UnitCount больше InitTable.TypeInfo.UnitCount. К сожалению, ни одна из этих записей не очень хорошо документирована. Кто-нибудь знает, что представляют собой эти два числа и почему они разные? Я предполагаю, что InitTable.UnitCount - это общее количество единиц в приложении. Но что это за другой?

1 Ответ

3 голосов
/ 06 августа 2010

Я считаю, что
- PackageInfoTable.UnitCount подсчитывает единицы измерения, хранящиеся в массиве UnitInfo, где каждая запись содержит указатели кода инициализации и завершения для частей модуля пакета.
- PackageInfoTable.TypeInfo.UnitCount вдольс ... UnitNames ссылается на Единицы, содержащие некоторые TypeInfo, хранящиеся в TypeTable (реальная Информация Типа или маркер границы единицы).

Подразделение может содержать некоторый код инициализации / финита, но нет TypeInfo для сбора и взаимности, следовательно, разница ...

К вашему сведению, посмотрите procedure ChangeFinalizationsOrder в MemCheck.pas чтобы посмотреть, как они взламывают InitTable (до D2006) ...

...