J'utilise otool pour obtenir des informations sur mon binaire. Voici une partie de ma sortie:Comment utiliser otool pour obtenir la taille d'un fichier binaire?
Load command 0
cmd LC_SEGMENT_64
cmdsize 72
segname __PAGEZERO
vmaddr 0x0000000000000000
vmsize 0x0000000100000000
fileoff 0
filesize 0
maxprot 0x00000000
initprot 0x00000000
nsects 0
flags 0x0
Load command 1
cmd LC_SEGMENT_64
cmdsize 952
segname __TEXT
vmaddr 0x0000000100000000
vmsize 0x0000000000268000
fileoff 0
filesize 2523136
maxprot 0x00000005
initprot 0x00000005
nsects 11
flags 0x0
Nous pouvons voir ici que command 1
avec segname __TEXT
commence à vmaddr 0x0000000100000000
Le problème est que la taille binaire est 2.3MB et 0x0000000100000000 est de 4 Go!
Je suppose que "un" dans le milieu de l'adresse est liée à l'architecture 64 bits, et 0x0000000100000000
en fait l'adresse 0x00
. Je cherchais des informations à ce sujet mais je n'ai rien trouvé d'utile. Quelqu'un peut-il confirmer mes hypothèses et expliquer comment cela fonctionne exactement?
Donc, quand mon application sera chargée à la RAM, il atterrira dans les bits inférieurs droite? Si je voudrais décharger memmory de RAM je devrais rechercher la mémoire qui réside entre 0x00 et 0x268000? – Sayaki
Non! Votre binaire sera mappé dans la mémoire virtuelle exactement comme il est écrit dans la sortie 'otool' - à l'adresse 0x0000000100000000, c'est-à-dire juste au-dessus de la limite de 4 Go. Tout l'espace en dessous est réservé à une page "invalide", qui se faufile chaque fois que quelqu'un tente d'y accéder. L'endroit où il atterrit dans la RAM physique est complètement hors de propos (et dépend des caprices du système d'exploitation - il peut effectivement être déplacé de manière transparente, par exemple au cas où il est échangé). –
Ok, je reçois tout maintenant. THX pour l'aide :) – Sayaki