IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation d'OS Assembleur Discussion :

Linkage 32 bits


Sujet :

Programmation d'OS Assembleur

  1. #1
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Juillet 2020
    Messages
    14
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : autre

    Informations forums :
    Inscription : Juillet 2020
    Messages : 14
    Par d�faut Linkage 32 bits
    Bonjour � tous,
    Dans l'optique de cr�er un petit os, je me heurt � un probl�me probl�matique (forc�ment) :
    Quand je link un code source C, compiler en fichier objet avec gcc, je ne parvient pas � me cr�er d�ex�cutable 32 bits correct. Je m'explique : je veut un fichier 32 bits ex�cutable standard, c'est � dire juste avec du code ex�cutable, pas avec des headers et une structure sp�ciale telle que le elf, par exemple. Pour ld, on peut utiliser la commande :
    Mais comme mon pc est en 64 bits, je ne peux pas le faire pour des fichier 32 bits.
    Sinon, j'ai une autre question :
    gcc -c cr�e un fichier ex�cutable binaire, c'est �a ? Mais simplement, sans les headers des fichiers ex�cutables du style elf etc ?
    Ensuite, si on utilise un d�sassembleur, est ce que l'on voit les headers ?
    Enfin, les commandes :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    gcc -m32 -c monfichier
    gcc -m32 -c monfichier2
    ld -m elf_i386 monfichier.o monfichier2.o -o monexecutable
    donnent le m�me r�sultat que :
    o� monfichier est monfichier et monfichier2 combin�s ensemble, lorsque j'utilise un d�sassembleur pour voir le r�sultat.
    Est ce normal ?
    Normalement, comme je link en elf, je devrais avoir un fichier elf, non, pas un binaire pur ?

  2. #2
    Expert confirm�
    Avatar de Kannagi
    Homme Profil pro
    cyber-pal�ontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 37
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : cyber-pal�ontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par d�faut
    Pour le 32 bits ,je ne comprend pas ta question , le linker ne transforme pas du code en 64 bits en 32 bits ou inversement quand tu fais ceci :

    Il va juste te filer le binaire brut du elf , si le elf c'est du 64 bits il te fera du 64 bits , si c'est du 32 bits il te filera du 32 bits, si c'est de l'ARM il fera de l'ARM.
    Bref , c'est dans la compilation le souci , pas le linker.
    Et comme tu as mis "gcc -m32" je comprend encore moins ta question.

    Ensuite, si on utilise un d�sassembleur, est ce que l'on voit les headers ?
    Non , surtout un header qui est l� juste pour aider le compilateur � compiler ,c'est juste des infos , �a ne g�n�re aucun code.

    Est ce normal ?
    Non , normalement si tu fais ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    gcc -m32 -c monfichier.c  -o monfichier.o
    gcc -m32 -c monfichier2.c  -o monfichier2.o
     
    ld --oformat binary monfichier.o monfichier2.o -o monexecutable
    Normalement tu as les deux fichier .o et un fichier binaire brut

    Le linker n'efface rien , donc tu dois retrouver les .o et donc non un .o �a doit pas �tre �quivalent � du ld avec sa sortie en binaire.

    Par contre il faut quand m�me mettre les options -Ttext et-Tbss au minimum sinon le code risque pas de marcher (�pres je ne sais pas si par d�faut les adresses text et bss sont correct).

  3. #3
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Juillet 2020
    Messages
    14
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : autre

    Informations forums :
    Inscription : Juillet 2020
    Messages : 14
    Par d�faut
    Cc,
    Merci de ta r�ponse.
    En fait, je pose cette question car quand je link un code compil� avec l'option -m32, �a me met une erreur disant que le format du fichier d'entr�e (32 bits) ne correspond pas au format du fichier de sortie (64 bits). Enfin, je crois que c'est ce que veux dire le message d'erreur.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ld: i386 architecture of input file `kernel.o' is incompatible with i386:x86-64 output
    ld: kernel.o: in function `scrollup':
    kernel.c:(.text+0x11): undefined reference to `_GLOBAL_OFFSET_TABLE_'
    ld: kernel.o: in function `putcar':
    kernel.c:(.text+0x8a): undefined reference to `_GLOBAL_OFFSET_TABLE_'
    ld: kernel.o: in function `_start':
    kernel.c:(.text+0x15e): undefined reference to `_GLOBAL_OFFSET_TABLE_'
    Donc c'est plut�t bizarre.
    Donc si j'ai compris correctement ce que j'ai fait, j'arrive � compiler en 32 bits avec l'option -m32, mais je n'arrive par contre pas � linker de sorte � cr�er un fichier binaire pur (ne contenant pas les headers du fichier elf). Donc est ce qu'il existe des linkers d�di�s au 32 bits ? Ou quelle option utiliser pour obtenir un code 32 bits ? Je sais que je peux utiliser le format elf_i386 pour obtenir un fichier elf 32 bits, mais lors des tests, �a plante, en raison (je pense) du fait que le fichier de sortie est un elf, et pas un binaire pur. L'erreur, sous virtual box, est la suivante (apr�s d�marrage correct du bootloader) :
    Une erreur critique est survenue pendant l'ex�cution de la machine virtuelle et cette derni�re a �t� arr�t�e.
    Sinon, quand je parle des headers, je ne parle pas des headers du C, mais de ceux utilis�s dans le format elf (en d�but du fichier, indiquant les diff�rents emplacements des sections, le type de fichier, etc). Mais au final, je pense que l'on ne les voit pas.
    Ensuite, il est possible que je n'ai pas compris les messages d'erreurs, alors si tu as une autre solution, je suis preneur aussi
    Sinon, pour les options Ttext etc, je m'en occupe

    EDIT : En fait, j'ai r�solu mon probl�me : pour que tout marche correctement, il suffit d'utiliser l'option -m elf_i386 (pour indiquer que l'on travaille en 32 bits) avec --oformat binary (pour indiquer que l'on ne veux que du code binaire). Merci beaucoup pour ton aide en tout cas !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Linkage 64 bits
    Par jkalzsmu dans le forum Visual Studio
    R�ponses: 2
    Dernier message: 02/07/2008, 09h27
  2. Main icon (16 bits)
    Par DR dans le forum C++Builder
    R�ponses: 2
    Dernier message: 02/09/2002, 08h23
  3. Cherche l'algo crc 16 bits
    Par icepower dans le forum Algorithmes et structures de donn�es
    R�ponses: 2
    Dernier message: 21/08/2002, 13h27
  4. Debugger 16-32 bits
    Par Mat dans le forum Assembleur
    R�ponses: 4
    Dernier message: 28/06/2002, 11h34
  5. Lire 1 bit d'un fichier en C
    Par Anonymous dans le forum C
    R�ponses: 3
    Dernier message: 23/05/2002, 18h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo