Il est possible de lire un fichier object?

J’étais curieux des fichiers .obj : je ne sais pas trop ce qu’ils sont (ou ce qu’ils contiennent), alors je les ai ouverts avec l’éditeur de texte de Vim et ce que j’ai trouvé à l’intérieur était un alien comme un langage …

Y a-t-il un moyen de comprendre ce qu’ils représentent et quel est leur contenu? De plus, pour quoi sont-ils utilisés?

Merci.

Sûr.

Mais chaque plate-forme différente a un format d’object différent. Sous Windows, vous pouvez utiliser un outil tel que dumpbin (dumpbin est fourni avec Visual Studio). Sous Linux, vous pouvez utiliser “dumpobj” ou démonter le programme.

Voici un bon lien pour Linux:

http://www.linuxjournal.com/article/1060

PS: objdump vous permet également de démonter l’object. Comme vous pouviez le faire avec “debug” sur les PC DOS …

Les fichiers .obj utilisés par link.exe ont le format MS COFF.

Vous pouvez trouver “Spécification Microsoft PE et COFF” ici , et parsingr le fichier .obj en fonction de celui-ci.

Ou, vous pouvez utiliser un outil existant comme dumpbin .

L’outil de readelf est utile pour vous montrer quelques détails sur les données:

 $ readelf -a /usr/bin/readelf ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: Advanced Micro Devices X86-64 ... 

Certaines de ses capacités à inspecter des sections spécifiques de l’exécutable peuvent également être utiles:

 $ readelf -p .rodata /usr/bin/readelf | more Ssortingng dump of section '.rodata': [ 4] R_IA64_IMM14 [ 11] R_IA64_NONE ... [ 1f58] Personality routine: [ 1f70] __gcc_personality_v0 [ 1f85] __gxx_personality_v0 [ 1f9a] __gcj_personality_v0 [ 1faf] __gnu_objc_personality_v0 ... 

En fait, démonter le code est un peu exagéré; Si vous comstackz votre code avec -g pour les symboles de débogage, vous pouvez utiliser readelf --debug-dump pour lire la source du programme, les informations de type, etc.