2016-10-18 1 views
0

Je travaille avec elf.h en C et j'ai un ELF64_Shdr *sh dont j'ai besoin pour obtenir le décalage. Je reçois comme ceci:C elf.h obtenir le décalage de ELF64_Shdr

unsigned char offset = sh->sh_offset; 
printf("Offset: %x\n",offset); 

mais cette impression « Offset: c0 » quand je sais que la valeur soit réellement 6c0 (recueilli de l'outil de ligne de commande elfe). Étrangement, si je fais ceci:

printf("Offset: %x\n",sh->sh_offset); 

il imprime « Offset: 5C0 », qui est plus proche, mais pas encore tout à fait raison. Quelqu'un pourrait-il me dire ce que je fais mal? Merci d'avance pour votre aide!

+1

'6c0' ne rentre pas dans un caractère. – tkausl

+0

Dang, je me sens stupide. Merci! Je ne sais toujours pas comment obtenir le bon décalage. – Nick

+1

'sh-> sh_offset' est de type uint64_t mais'% x' à 'printf' attend un' int' (généralement 32 bits). Vous pouvez essayer d'utiliser '% lx' pour' printf' puisque vous passez un int long. Je ne suis pas sûr si cela réglera le problème, dur. –

Répondre

0

unsigned char offset = sh->sh_offset;

C'est votre problème . Vous tronquez une entité 64 bits de type Elf64_Off à 8 bits. Ne faites pas que!

Si vous devez enregistrer le décalage, puis enregistrez-le dans une variable de type approprié:

Elf64_Off offset = sh->sh_offset; 

Pour imprimer, utilisez %lx spécificateur de format.