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

Autres éditeurs Discussion :

[GCC]Probleme compilation FLAT BINARY sur windows


Sujet :

Autres éditeurs

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 24
    Points : 17
    Points
    17
    Par défaut [Résolu] [GCC]Probleme compilation FLAT BINARY sur windows
    Salut,

    Voila j'essaye actuellement de compiler des sources en C avec gcc et ld en "plain binary" dit aussi"binaire plat" avec l'option --oformat binary de ld. j'essaye sur un tous petit bout de C.



    Cela marche tres bien sur Linux, aucun probleme.



    Par contre sur windows, je n'y arrive pas je ne comprend pas tous ce qui ce passe en fait.




    Cliquez ici pour voir le déroulement de la methode utilisée.

    Je me récupere les message d'erreur suivant:
    undefined reference to '_alloca'
    undefined reference to '__main'
    [Je n'est pas mis ca dans mon code moi !!!]

    Lorsqu'on essaye d'aller plus loin, linkage directement en binaire on a le message d'erreur :
    ld: PE operations on non PE file.
    (Les PE sont les formats d'exécutables sur windows)
    [Bah je ne veux pas faire de PE moi justement !!!!]

    Voila mes questions

    - D'ou viennent ces underscore '_' ? Comment s'en débarrasser ?
    - D'ou vient ce __main ? Comment s'en débarrasser ?
    - D'ou vient ce __alloca ? Comment s'en débarrasser ?
    - Pourquoi dois je passer "_main" au lieu de "main" comme point d'entrée ?
    - Bref comment compiler plain binary sous Windows avec gcc et lg ?.
    - Pourquoi ces différences entre les versions portées gcc et ld ?
    - Quelqu'un a t'il déja réussi a faire ca sous windows ?
    - Est ce que je me trompe ?

    J'ai du mal a trouver les infos sur le net concernant Windows...

    Merci de m'aider

    Hexanium

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,
    les underscore ajouter sont, je crois, les nom des fonctions en assembleur.
    Pour le reste, tu n'as pas un programme un peu plus complet : j'ai peur qu'un bloc d'instruction vide soit un peu juste surtout que tu déclare la fonction même comme renvoyant un entier (ce qui est trés bien), par contre tu ne le fais pas
    Essai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdlib.h>
    #include <stdio.h>
     
    int main( void )
    {
      puts( "Hello world !\n" );
      return( EXIT_SUCCESS );
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Salut gege2061,

    Déja, merci pour ton attention, mais justement je veux faire un un fichier "binaire plat" et surtout sans aucune dépendance. donc sans aucun include de windows ou autre OS et surtout pas dans une entete PE.

    Le code que je donne est le plus simple possible pour voir le code généré, comme tu as pu le voir cela marche sur Linux ainsi.

    J'aimerais comprendre comment compiler un noyau en C, j'y arrive sur linux, mais je ne comprend pas pourquoi cela ne marche pas sur Windows et les '_' m'intrigue.

    Pourquoi Linux ne les ajoute pas et se passe de _alloca et __main ?? Et pourquoi windows non ???
    Ou comment parametrer Gcc et Ld pour qu'il me génere du bytecode pur ?
    Un beau binaire plat à partir du C comme sur Linux !

    Hexanium

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Ok je comprend mieu
    Donc utilise plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int main( void )
    {
      return( 0 );
    }
    Je croi qu'il faut aussi utilise une option pour gcc qui ressemble à REgade du coté de la création d'un OS : http://sos.enix.org/ dans les premiers articles c'est expliquer.

    Bon courrage

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Salut Gégé,

    Ne te préocupe pas du return c'est vraiement un source de test simplicime cela n'a aucune importance dans mon cas, l compile en .obj passe, le probléme n'est pas la !

    Je ne veux pas me faire corriger un source, j'aimerais que l'on m'explique pkoi je n'arrive pas à linker sous Windows !

    j'ai mattez ici:
    http://sos.enix.org/

    Mais cela n'explique pas vraiment la compilation sur Windows, il s'attache plus a Linux dans leurs exemples ! (Et ca aucun probleme la dessus)

    Regarde ma procedure 1 coup sur Linux un coup sur Windows !
    Pouquoi ca marche sur l'un et pas sur l'autre ?

    http://www.hexanium.com/hexatronic/o..._c_compile.htm

    Bref je ne trouve pas réponce a mes questions !

    Si quelqu'un à une autre idée !

    J'espere que vous avez compris mon probleme ?

    A++

    Hexanium[/url]

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Salut,

    Bien en postant sur plusieurs forum j'ai trouvé des reponces, ca y'est ca marche. je met la synthese ici:
    http://www.hexanium.com/hexatronic/o..._c_compile.htm
    si ca peut aider !

    Merci a tous du coup de main !

    A++

  7. #7
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Arf même pas eu le temps de chercher!
    Merci pour la synthèse

    N'oublie pas de cliquer sur résolu avant de partir.

  8. #8
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 68
    Points : 86
    Points
    86
    Par défaut
    je me posais une question:

    A quoi cela sert-il de compiler en flat binary?

  9. #9
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par capitN.flam
    A quoi cela sert-il de compiler en flat binary?
    C'est pour obtenir un fichier binaire directement exécutable par le processeur, à la différence d'autre format exécutable, comme ELF qui contient des informations destinée à l'OS.

    Maintentant je ne suis pas un spécialiste, je peux me trompé

  10. #10
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 68
    Points : 86
    Points
    86
    Par défaut
    donc si je comprends bien cela pourrait servir a faire quelque chose du genre grub ou lilo?

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Salut,

    En effet c'est pour ca que je voulais compiler du flat binary.
    J'ai commencé a coder un petit OS amateur, avec un bootlaoder en assembleur et le noyau en C. Tous cela sur Linux, mais actuellement j'ai des soucis pour acceder a une autre machine que du MS, je suis peut etre pas doué, mais jai galéré a trouver comment compiler la meme chose sur Windows.

    L'interet de compiler en Flat binary c'est d'avoir directement le code executable (bytescode) sans rien, pas d'entete, pas de format proprio, le code peut etre compris pas le processeur directement. Tres utile pour faire des patchs, des noyaux, bref du code pres du matos comme en effet aussi grub ou lilo, tous est possible en flat !

    Voila,

    A++

    Hexanium

    PS:
    Désolé pour le 'resolu' j'avais pas vu le bouton.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WS 2008 R2] Probleme avec Service W3SVC sur windows 2008 R2
    Par vladock dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 18/09/2014, 13h50
  2. [2013] Probleme instalation office 2013 sur windows 8
    Par iliesss dans le forum Microsoft Office
    Réponses: 2
    Dernier message: 14/06/2014, 23h54
  3. probleme compilation code source sur autre pc
    Par milach dans le forum Visual C++
    Réponses: 1
    Dernier message: 18/04/2008, 09h06
  4. Compiler pour utilisation sur Windows
    Par bit_o dans le forum Linux
    Réponses: 3
    Dernier message: 25/04/2007, 21h07
  5. Probleme pour installer Jonas sur Windows XP
    Par Yakurena dans le forum JOnAS
    Réponses: 1
    Dernier message: 27/10/2006, 14h46

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