Section courante

A propos

Section administrative du site

Introduction

L'extension de fichier «.OBJ» permet d'indiquer le résultat d'un code compiler avant d'effectuer des liaisons pour en faire un programme exécutable. Il est utilisé par nombreux compilateurs C et C++ concurrent d'Intel, comme ceux de Borland. Le format de fichier .OBJ constitue l'un des formats de fichiers objets les plus répandus dans l'univers des compilateurs destinés à l'architecture Intel 80x86. Il représente le résultat intermédiaire produit après la compilation d'un ou de plusieurs fichiers sources, mais avant l'étape de l'édition de liens (linking) qui permettra de générer un programme exécutable ou une bibliothèque. Un fichier objet contient généralement le code machine, les données, les tables de symboles ainsi que les informations de relocalisation nécessaires au fabricant de liens pour assembler correctement les différents modules d'une application.

Au fil des années, ce format a été adopté par de nombreux compilateurs et environnements de développement, notamment ceux de Borland, Microsoft, Intel, Digital Research et plusieurs autres fabricants de compilateurs compatibles avec l'architecture x86. Bien que certains compilateurs utilisent aujourd'hui le format COFF ou d'autres variantes plus modernes, le format OBJ historique demeure largement documenté et reste indispensable pour l'étude des anciens compilateurs, des systèmes DOS, des outils de rétro-ingénierie et des logiciels de développement classiques.

La section suivante présente les principales caractéristiques techniques de ce format, notamment son auteur, les plateformes concernées, les logiciels compatibles ainsi que les différents types d'enregistrements qui composent sa structure interne. Ces informations permettent de mieux comprendre l'organisation des fichiers OBJ et facilitent le développement d'utilitaires capables de les analyser, de les modifier ou de les convertir.

Spécification

Spécification Description
Type Compilateur
Auteur Intel
Supporté par les applications Intel C++, Borland C++, Microsoft Pascal, Pascal-86, Turbo C, Turbo C++,...
Plateforme Assembleur 80x86

Structure du fichier

Le format OBJ est constitué d'une suite d'enregistrements binaires décrivant les différents éléments produits lors de la compilation. Chaque enregistrement débute par un identifiant permettant au fabricant de liens ou à un utilitaire d'analyse de déterminer sa nature et la manière dont son contenu doit être interprété. Selon les besoins du compilateur, certains enregistrements peuvent apparaître plusieurs fois tandis que d'autres sont facultatifs ou réservés à des usages particuliers. Voici les balises que contiennent les fichiers objet (.OBJ) qu'utilise les compilateurs de famille INTEL:

Balises MID Description
6Eh RHEADR Cette balise indique l'enregistrement d'entête d'un R-Module
70h REGINT Cette balise indique l'enregistrement d'initialisation de registre
72h REDATA Cette balise indique l'enregistrement des données d'énumération relogeable
74h RIDATA Cette balise indique l'enregistrement des données réitéré relogeable
76h OVLDEF Cette balise indique l'enregistrement de définition de recouvrement
78h ENDREC Cette balise indique la fin d'un enregistrement
7Ah BLKREC Cette balise indique l'enregistrement d'un bloc de définition
7Ch BKLEND Cette balise indique la fin d'un enregistrement de bloc
7Eh DEBSYM Cette balise indique l'enregistrement de symbole de déboguage
80h THEADR Cette balise indique l'enregistrement d'entête d'un T-Module
82h LHEADR Cette balise indique l'enregistrement d'entête d'un L-Module
84h PEDATA Cette balise indique une énumération de données physique
86h PIDATA Cette balise indique une réitéré de données physique
88h COMENT Cette balise indique l'enregistrement de commentaire
8Ah MODEND Cette balise indique la fin d'un module d'enregistrement
8Bh MODENDL Cette balise indique la fin d'un module d'enregistrement
8Ch MODENDL Cette balise indique l'enregistrement de définition de nom externe de format long
8Eh TYPDEF Cette balise indique l'enregistrement de définition de type
90h PUBDEF Cette balise indique l'enregistrement de définition de nom publique
91h PUBDEFL Cette balise indique l'enregistrement de définition de nom publique de format long
92h LOCSYM Cette balise indique l'enregistrement de symboles local
94h LINNUM Cette balise indique l'enregistrement des numéros de ligne
96h LNAMES Cette balise indique l'enregistrement de liste des noms
98h SEGDEF Cette balise indique l'enregistrement de définition de segment
99h SEGDEFL Cette balise indique l'enregistrement de définition de segment long
9Ah GRPDEF Cette balise indique l'enregistrement de définition de groupe
9Ch FIXUPP Cette balise indique l'enregistrement de Fix-Up.
9Dh FIXUPP Cette balise indique l'enregistrement de Fix-Up long.
A0h LEDATA Cette balise indique l'énumération de données logique.
A1h LEDATAL Cette balise indique l'énumération de données logique long.
A2h LIDATA Cette balise indique la réitéré de données logique.
A3h LIDATAL Cette balise indique la réitéré de données logique long.
A4h LIBHED Cette balise indique l'enregistrement d'entête de bibliothèque.
A6h LIBNAM Cette balise indique l'enregistrement des noms de module de bibliothèque.
A8h LIBLOC Cette balise indique l'enregistrement des emplacements de module de bibliothèque.
AAh LIBDIC Cette balise indique l'enregistrement du dictionnaire de bibliothèque.
B0h COMDEF Cette balise indique l'enregistrement du définitions de données commune.
B4h LEXTDEF Cette balise indique un définition local externe.
B6h LPUBDEF Cette balise indique un définition local publique.
B7h LPUBDF2 Cette balise indique un définition local publique (2ième niveau).
B8h LCOMDEF Cette balise indique un définition de données local commune.
F0h LIBHDR Cette balise indique un enregistrement d'entête de bibliothèque.
F1h LIBEND Cette balise indique une fin d'enregistrement de bibliothèque.

Code source

Plusieurs utilitaires ont été développés afin de permettre l'analyse, l'affichage ou la manipulation des fichiers d'extension «.OBJ». Ces programmes facilitent l'étude de la structure interne du format, le débogage d'outils de développement ou encore la création de fabricants de liens et d'utilitaires spécialisés. Le tableau suivant présente quelques exemples de programmes capables de lire ou de traiter ce type de fichier.

Voici des exemples de code source d'utilitaires pour manipuler les .OBJ :

Lien Langage de programmation Description Projet Syntaxe
DISOBJ.PAS Free Pascal, Turbo Pascal Cette commande permet d'analyser et de désassembler un fichier d'extension «.OBJ». DEV-COOLS DISOBJ
LINK.PAS Free Pascal, Turbo Pascal Cette commande permet de lancer le fabricant de liaison. DEV-COOLS LINK


Dernière mise à jour : Mardi, le 24 juin 2014