samedi 20 juin 2009

print-size-of-pointer: exécution sous Linux

Voici ce qui se passe lorsque j'exécute mon programme print-size-of-pointer sous Linux:
(Il y a deux versions: compilé en 32-bit et compilé en 64-bit):

Résultat sur cobra (Intel(R) Core(TM)2 Quad CPU Q9400 @ 2.66GHz, Debian GNU/Linux "squeeze" 64-bit):
[pbn@cobra] /home/pbn>cd other/print-sizeof-pointer/

Voyons les fichiers
[pbn@cobra] /home/pbn>ls -l
total 92
-rwxr-xr-x 1 pibe pibe 561 jun 1 20:00 print-sizeof-pointer.c
-rwxr-xr-x 1 pibe pibe 6587 jun 1 20:00 print-sizeof-pointer-linux-32bit.bin
-rwxr-xr-x 1 pibe pibe 9415 jun 1 20:00 print-sizeof-pointer-linux-64bit.bin
-rwxr-xr-x 1 pibe pibe 53640 jun 1 20:00 print-sizeof-pointer-macosx.bin


Voyons de quel type d'exécutable il s'agit, c'est du Linux ELF 32-bit
[pbn@cobra] /home/pbn>file print-sizeof-pointer-linux-32bit.bin
print-sizeof-pointer-linux-32bit.bin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped


Voyons de quel type d'exécutable il s'agit, c'est du Linux ELF 64-bit
[pbn@cobra] /home/pbn>file print-sizeof-pointer-linux-64bit.bin
print-sizeof-pointer-linux-64bit.bin: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped


Voyons la version du kernel:
[pbn@cobra] /home/pbn>uname -a
Linux cobra 2.6.26-2-amd64 #1 SMP Fri Mar 27 04:02:59 UTC 2009 x86_64 GNU/Linux


Voyons le "type de machine" du kernel:
[pbn@cobra] /home/pbn>uname -m
x86_64


Demandons à dpkg sur quelle architecture nous sommes:
[pbn@cobra] /home/pbn>dpkg --print-architecture
amd64


J'exécute la version 32-bit de mon programme:
[pbn@cobra] /home/pbn>./print-sizeof-pointer-linux-32bit.bin
print-sizeof-pointer.c
If the result is 8, this machine is a 64-bit system.
If the result is 4, this machine is a 32-bit system.
Result: 4


J'exécute la version 64-bit de mon programme:
[pbn@cobra] /home/pbn>./print-sizeof-pointer-linux-64bit.bin
print-sizeof-pointer.c
If the result is 8, this machine is a 64-bit system.
If the result is 4, this machine is a 32-bit system.
Result: 8
[pbn@cobra] /home/pbn>


En bref sous Linux sur une machine 64-bit avec un OS 64-bit, je peux à la fois exécuter les exécutables 32-bit et 64-bit. Et en fait, les exécutables 32-bit ont leurs adresses en 32-bit, les exécutables 64-bit ont leurs adresses en 64-bit.

Aucun commentaire: