8
votes

Quelle est la différence entre "Adresse de la table d'importation" et "Adresse de la table d'adresses d'importation" dans les répertoires de PE?

text alt

Quelqu'un sait la différence?


0 commentaires

3 Réponses :


7
votes

Si vous souhaitez jouer avec des exécutables portables, il n'y a aucun moyen de saisir une copie de Les spécifications .

Cela fait un moment, mais dans le cas de la mémoire me sert correctement: IT et IAT sont identiques, sauf que IAT est rempli par le chargeur PE tout en résolvant les importations - mais ne prenez pas mon mot Pour cela, cochez les spécifications :)

EDIT:

Avait un rapide parcourir les spécifications et rafraîchis ma mémoire un peu: La table d'importation est la structure principale , avec une entrée par dll que vous importaez. Chaque entrée contient, entre autres choses, une table Importer Lookup Table ( it ) et Tableau d'adresse d'importation ( iiat ) Pointeur (IIRC C'étaient appelé OriginalFirstTheunk et FirstThunk ). Les tables ILT et IAT sont identiques sur disque, mais pendant l'exécution, l'IAT sera remplie d'adresses de mémoire des fonctions importées.

Le champ IAT d'en-tête PE ne peut probablement pas être invoqué à 100% si vous souhaitez pouvoir traiter avec des extérieurs non standard, tout comme vous ne pouvez pas dépendre du début du code et des pointeurs de données. Il est préférable d'ignorer le champ d'en-tête IAT et de l'analyser à la place. De plus, lors de l'analyse de la mesure, l'ILT manquera sur certains exécutables, que seuls les lieurs de Borland plus âgés (IIRC) ont été notoires pour ne pas générer l'ILT.

Edit 2: Définitions
  • IT: Table d'importation (Section PECOFF 6.4.1) - Tableau de Per-DLL Image_IMPORT_DEScriptor .
  • ITT: Tableau de recherche d'importation (Section PECOFF 6.4.2) - Tableau de Per-Import Image_THUNK_DATA .
  • IAT: Tableau d'adresses d'importation (Section PECOFF 6.4.4) - Sur le disque: identique à ILT, Runtime: rempli d'adresses de mémoire de fonction importées.


9 commentaires

Mais vous pouvez voir du graphique ci-dessus, ils ne sont pas identiques, c'est 517c pendant que iat est 5000


Identique ne signifie pas qu'ils pointent sur le même endroit , mais que le contenu sont les mêmes.


IAT est rempli par le chargeur PE tout en résolvant les importations , de sorte que IAT ne devrait être valide que lorsqu'il est chargé, par exemple, n'existe pas lors d'une visionneuse hexagonale, non?


Cela signifie que sur le disque, vous devriez voir le même contenu d'octet, alors qu'après le chargement, l'IAT sera modifié.


Non, je viens d'inspecter le contenu des octets à l'intérieur et à IAT sur disque, ils sont différents.


Qu'entendez-vous par it ? Je ne vois pas un tel terme même dans cet article: Sandsprite.com/codestuff/unStanding_imports.htmlLec a>


@Comer: Table de recherche d'importation, terme du pecoff.doc.


Qu'est-ce que ITT, car il n'y a aucune information concernant les adresses de mémoire des fonctions importées? IMO, seuls les heures d'exécution remplies IAT sont utiles.


@Comer: Il est de faire des importations liées. Vérifiez Cet article pour une explication courte.



1
votes

@snemarch est surtout juste, même si je pense que lui et la documentation ne sont pas fausses que l'ILT et l'IAT sont les mêmes sur le disque. J'ai parcouru les octets, ils ne sont pas les mêmes.

Cependant, il a raison à propos de la définition et du but des tables.

Le chargeur Windows est utilisé par le chargeur Windows pour associer les fonctions utilisées par un exe avec leur adresse dans une DLL. Toutefois, une fois que cette association est faite, l'adresse de la DLL est écrite dans le tableau IAT (numéro d'adresse d'importation) dans l'EXE. Une fois que l'EXE est chargé, il n'a plus besoin de l'ILTMore, lorsqu'il appelle une fonction dans une DLL, cela pointe dans l'IAT.


0 commentaires

2
votes

image_directory_enterry_import conduit éventuellement à plusieurs Thunk IAT, qui sont stockés dans une région de mémoire, qui commence à [image_directory_enterry_ia] .virtualaddress [image_directory_enterry_IAT ] .Size .

Je suppose que c'est utile lorsque toutes les sections sont chargées par défaut comme en lecture seule, et que vous pouvez utiliser image_directory_enterry_ia pour rendre le iat (mais pas l'ILNE) Thunks.

BTW, ILT et IAT peuvent avoir un contenu différent, lorsque la DLL est liée. Dans ce cas, IAT ThunkS contient les adresses pré-calculées des fonctions importées.


0 commentaires