2010-08-05 21 views
0

Si vous placez un point d'arrêt dans System._StartExe et examinez l'InitTable qui est transmis, vous remarquerez que InitTable.UnitCount est supérieur à InitTable.TypeInfo.UnitCount. Malheureusement, aucun de ces documents n'est très bien documenté. Est-ce que quelqu'un sait ce que ces deux chiffres représentent et pourquoi ils sont différents? Je suppose que InitTable.UnitCount est le nombre total d'unités dans l'application. Mais quel est l'autre?Pourquoi UnitCount diffère-t-il entre PackageInfoTable et TPackageTypeInfo?

+0

UnitCount indique le nombre d'entrées dans la table UnitInfo associée. Je suppose que TypeInfo.UnitCount correspond à quelque chose de similaire. Pouvez-vous comparer ces deux tableaux pour voir comment leur contenu diffère? –

+0

@Rob: Pas vraiment. Les deux tableaux montrent différents ensembles de données sur leurs unités respectives, sans aucun chevauchement aussi près que je peux dire. La première table n'inclut même pas les noms d'unités, ce qui me fait me demander où des programmes comme DeDe les extrayaient dans les EXE compilés avant le D2010. –

Répondre

3

Je crois que
- PackageInfoTable.UnitCount compte les unités stockées dans le tableau UnitInfo, où chaque enregistrement détient le initalization et les pointeurs de code finalisation pour les unités parties du paquet.
- PackageInfoTable.TypeInfo.UnitCount avec UnitNames fait référence aux unités contenant TypeInfo stockées dans le TypeTable (information de type réel ou marqueur de limite d'unité).

Une unité peut contenir du code Init/mais pas appartenue Finit de rassembler et réciproquement, d'où la différence ...

Pour votre information, regardez procedure ChangeFinalizationsOrder en MemCheck.pas pour voir comment ils pirater le InitTable (jusqu'à D2006) ...