[AIX] 32 ou 64 bits ?
Lorsque vous travaillez sur un serveur AIX, vous pouvez-être confronté, comme sous Linux, à des problèmes d’architecture et pouvez avoir besoin de savoir si telle ou telle librairie (statique ou dynamique) est en 32 ou 64 bits.
Avant de nous lancer dans cet exercice, commençons par vérifier l’architecture de l’os en utilisant la commande :
Ce qui donne :
Dans cet exemple, notre OS est en version 64 bits.
Les bases sont posées, nous pouvons nous lancer dans l’analyse nos fichiers.
Utilisons la commande « file » afin de déterminer si notre librairie dynamique (.so) est en 32 ou 64 bits :
Ce qui donne :
Notre fichier est donc en version 64 bits.
Nous pouvons également utiliser la commande « objdump » :
ou
Ce qui donne :
Vous pouvez également avoir besoin d’obtenir cette même information mais pour un fichier .a « .a » est le format utilisé officiellement pour les bibliothèques statiques, il s'agit en réalité d'une archive. Une bibliothèque statique est donc un fichier *.a qui contient lui-même un ou plusieurs fichiers objets *.o ordinaires, tels que produits par le compilateur.
Il faut donc passer par une étape intermédiaire si vous souhaitez savoir si les librairies contenu dans cet archive sont en 32 ou 64 bits. D’abord, nous allons examiner le contenu de notre librairie statique, encore une fois via en utilisant la commande « objdump » :
Ce qui donne :
Nous avons donc un fichier .so dans cette archive. Nous pouvons également deviné qu'il s'agit d'une version 64 bits du fait de la mention aix5coff64-rs6000.Nous allons toutefois vérifier en utilisant la commande « ar » :
Cette commande va extraire le contenu de l'archive.
L'execution d'une commande « ls -lrt » permet de vérifier l'extraction :
Nous pouvons ensuite analyser le fichier libodbc.so.1 via la commande objdump, comme nous l'avons fait un peu plus haut.
La commande « ar » permet également de visualiser le contenu de l'archive, comme nous l'avons également fait via la commande objdump.
Aussi :
va afficher les uniquement fichiers 64 bits contenus dans libodbc.a
Exemple :
va afficher les uniquement fichiers 32 bits contenus dans libodbc.a
Exemple :
1 |
getconf -a |grep BITMODE |
1 2 3 |
HARDWARE_BITMODE: 64 KERNEL_BITMODE: 64 |
1 |
file libodbc.so.1 |
1 2 |
libodbc.so.1: 64-bit XCOFF executable or object module not stripped |
1 |
objdump -x libodbc.so.1 | head |
1 |
objdump -fph libodbc.so.1 |
1 2 3 4 5 |
libodbc.so.1: file format <strong>aix5coff64-rs6000</strong> libodbc.so.1 architecture: <strong>powerpc:620</strong>, flags 0x00000177: |
1 |
objdump -a libodbc.a |
1 2 3 4 5 6 |
In archive libodbc.a: libodbc.so.1: file format aix5coff64-rs6000 rwxr-xr-x 2429/100 678030 Apr 15 00:25 2004 libodbc.so.1 |
1 |
ar -Xany -x libodbc.a |
1 2 3 4 5 6 7 8 |
-rwxr-xr-x 1 user staff 173587 Apr 15 2004 libodbcinst.a -rwxr-xr-x 1 user staff 692699 Apr 15 2004 libodbc.a -rwxr-xr-x 1 user staff 76933 Apr 15 2004 libodbccr.a -rwxr--r-- 1 user staff 955 Sep 13 2004 README.AIX -rw-r--r-- 1 user staff 25275 Sep 13 2004 LICENSE -rw-r--r-- 1 user staff 983040 Jul 24 2013 unixodbc228_r64.tar <strong>-rwxr-xr-x 1 user staff 678030 Sep 1 20:36 libodbc.so.1 </strong> |
1 |
ar -X64 -t libodbc.a |
1 2 3 |
ar -X64 -t libodbc.a libodbc.so.1 |
- libodbc.a contient un fichier libodbc.so.1 64 bits.
1 |
ar -X32 -t libodbc.a |
1 |
ar -X32 -t libodbc.a |
- libodbc.a ne contient aucun fichier 32 bits.
File Format | Architecture | Flags | OS |
---|---|---|---|
aixcoff-rs6000 | rs6000:6000 | 0x00000177 | AIX - 32-bit PowerExchange |
aix5coff64-rs6000 | powerpc:620 | 0x00000177 | AIX - 64-bit PowerExchange |
elf32-i386 | i386 | 0x00000150 | Linux - 32-bit |
elf64-x86-64 | i386:x86-64 | 0x00000150 | Linux - 64-bit |