Annonce

Réduire
Aucune annonce.

[ Leattle et Big endian ]

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • [ Leattle et Big endian ]

    Bonjour à tous,

    Une petite explication concernant l'agencement des variables en mémoire, deux agencements seront présentés, le big endian ainsi que le little endian.

    Le little endiant est utilisé par les processeurs Intel tandis que le big endian est implémenté dans les processeurs ARM.

    Petit rappel concernant le fonctionnement interne des PC :

    Lorsque vous programmez, vous devez souvent(toujours ?) utiliser des variables pour stocker des informations, quand vous

    lancez votre programme, les données sont chargées depuis le disque dur vers la RAM pour que le processeur puisse interagir avec celle-ci.

    Le processeur ne travail JAMAIS avec le disque dur, il est bien trop lent, les données sont d'abord chargées dans la RAM pour qu'elles puissent être exploitables par le processeur.

    Le processeur dispose de plusieurs registres qui vont lui permettre de se situer dans la RAM et d'effectuer des opérations sur les valeurs assignées aux adresses.

    C'est ici que rentre en jeu le [little - Big] endian :

    Avec une architecture Big endian :

    Exemple avec 0x1234 en mémoire :

    rect3013.png

    La variable est placée telle qu'elle en mémoire, cette disposition paraît normale au premier abord, cependant elle ne l'est pas si vous avez eu l'occasion de faire

    un peu de binaire, en effet, en base 2, on lit de droite vers la gauche.

    Cette manière de disposer les valeurs en mémoire peu portée a confusion cependant je trouve qu'elle est plus "human readable".

    Avec une architecture Little endian :

    Exemple avec 0x1234 en mémoire :

    rect3023.png

    Ici, le bit le plus faible sera stocké dans l'adresse la plus petite, cette représentation peut paraître étrange, mais elle respecte bien

    la représentation binaire. On retrouve notre 0x1234 mais à l'envers, plutôt embêtant.

    De nouveau post seront a venir concernant le reverse engineering, je cultive avec acharnement le domaine en ce moment et je m'efforcerais de faire

    partager se que j'y ai appris avec vous, comme chaque membre le fait.

    Merci de m'avoir lu.

    ( un up du post plus complet qui réponds a une problématique posée dés le départ est a venir en réponse à vos remarques, très pertinentes, et je vous en remercie )
    Dernière modification par shirocen, 08 février 2016, 08h59.
    deux et deux font cinq

  • #2
    Merci beaucoup pour ce partage, j'aimerais en effet comprendre un peu le reverse et si tu partage tes avancées ce serait un plus pour moi et les membres.

    Je n'ai pas tout compris mais je vais relire à tête reposé, car là suis encore malade. Par contre, c'est très bien expliqué.

    Commentaire


    • #3
      Es-tu sûr qu'on parle de bit et pas plutôt d'octet de poids faible ou fort ? Dans ton exemple ça semble très clairement parler d'octets et non de bits...

      EDIT 1:

      On peut aussi à l'aide d'un petit interpréteur python par exemple, connaître l'endianness du système

      Code:
      >>> import sys
      >>> sys.byteorder
      'little'
      EDIT 2:

      En bash, avec cette commande

      Code:
      lscpu | grep Byte
      EDIT 3:

      [ Leattle et Big endian ]
      Oh le titre ???
      Dernière modification par fred, 07 février 2016, 20h55.

      Commentaire


      • #4
        Un loup qui répond à un renard, en tout cas quand on parle du loup on en vois le bout ^^

        Promis, je prendrais un lion comme avatar comme ça je mettrais tout le monde d'accord en rugissant ^^ A prendre au 3e degré ^^

        Moi j'ai juste une question, tu aurais du un peu plus détailler genre human readable, j'ai du chercher sur google pour comprendre car je le dit franchement je ne savais pas ce que c'était.

        C'est super, mais des explications plus détaillés de ce qu'est le big endian aurait bien venu. Ce n'est pas méchant attention, je suis content de partage dans ce domaine, mais j'ai du mal. J'aime comprendre et apprendre et là je n'ai pas compris la fin et la différence majeure entre les deux. Certes, je pourrais chercher sur internet mais alors cela enlèverait toute l'importance de ton tutoriel.

        Je sais, je suis chiant, mais je suis peut être le seul à ne pas tout comprendre, quand je sais pas, je le dit. Faut expliquer doucement au vieux ^^

        Commentaire


        • #5
          C'est avoir l'esprit critique qui permet de faire avancer les choses. Et combien même si tu n'as pas compris, c'est que d'autres sont/seront dans le même cas. Tu exprimes aussi avec détails là où est ton problème, et ça prouve que tu ne critiques pas pour juste critiquer.

          Moi j'ai juste une question, tu aurais du un peu plus détailler genre human readable, j'ai du chercher sur google pour comprendre car je le dit franchement je ne savais pas ce que c'était.
          Si on considère deux machines A et B dont le moyen de stocker leur représentation de données est différent, l'un petit boutiste et l'autre grand boutiste, il faudra bien que lors de la transmission de données ces deux machines se comprennent. Il faudra donc faire une conversion afin de permettre aux deux machines de se comprendre.

          L'image mémoire étant différente pour chacune des machines et pourtant communiquant la même donnée, il suffit de faire une simple inversion d'octets.

          C'est super, mais des explications plus détaillés de ce qu'est le big endian aurait bien venu. Ce n'est pas méchant attention, je suis content de partage dans ce domaine, mais j'ai du mal. J'aime comprendre et apprendre et là je n'ai pas compris la fin et la différence majeure entre les deux. Certes, je pourrais chercher sur internet mais alors cela enlèverait toute l'importance de ton tutoriel.
          Une chose est très importante, il faut toujours lors d'un tutoriel donner une problématique et là résoudre, ici sans problématique, quelqu'un qui ne voit pas le terme big endian et little endian, ne sait absolument pas l'intérêt de ces deux termes et donc l'intérêt de lire ce tutoriel. Il est donc normal, que tu sois perdu car moi même j'ai pris beaucoup de temps à lire et relire, et j'ai aussi eu beaucoup de mal à savoir où l'auteur voulait en venir.

          Je sais, je suis chiant, mais je suis peut être le seul à ne pas tout comprendre, quand je sais pas, je le dit. Faut expliquer doucement au vieux ^^
          Plus on a une critique constructive plus il est facile à l'auteur de corriger les points faibles de son tutoriel, le problème ici, c'est que c'est difficile, car on ne voit pas trop comment aider, sachant pas où va l'auteur.

          J'ai un peu titiller aussi, car j'ai l'impression que le sujet n'est pas 100% maîtrisé par l'auteur, je pense shirocen que tu as dû confondre bits et bytes (équivalent de octets). J'aurais aimé plus de détails aussi... Un topic ça se modifie, faudra demander en MP, je modifierais

          Commentaire


          • #6
            Merci @fred pour toutes ces explications. Je me doute qu'il n'est pas évident de mettre à plat des tutoriels de ce type. J'espère que tu en fera d'autres en tout cas.

            Merci à tous pour vos explications

            Commentaire


            • #7
              @fred j'ai toujours entendu "le bit de poids faible", le bit ayant la plus petite valeur.

              Je me suis permis de mettre [ Leattle and Big endian ] en titre de sujet car le tag [ Little ] est interdit et réservé

              Je prends note de vos remarques pour améliorer cette explication et les prochaines qui devraient suivre :s

              EDIT : Après vérifications, fred a parfaitement raison et on parle bien d'octet de poids fort ainsi que d'octet de poids faible

              excusez-moi des informations erronées que j'ai pu présentées, une refonte du post est à venir.. ( la boulette.. :s )
              Dernière modification par shirocen, 08 février 2016, 09h02.
              deux et deux font cinq

              Commentaire


              • #8
                Merci @shirocen, hâte de relire la refonte. Ne sois pas excuser, c'est difficile de construire un tutoriel sur un sujet si pointilleux, moi-même celà fait des mois que je construis pour mon blogue un article sur le quantique informatique et physique. C'est tellement complexe à comprendre, qu'à résumer et définir explicitement pour un article de niveau générale c'est un challenge.

                Juste essais de plus te placer au niveau de personne qui n'ont jamais vu ou entendu ce genre de définition.

                Celà m'interresse fortement, c'est pourquoi je l'espère tu ne t'arrêtera pas en si bon chemin et j'ai hâte de voir la suite. Fait-toi un plan si tu pense qu'il te faudra plusieurs sujets.

                Encore merci à toi pour tes efforts, si tout le monde mettait une pierre à l'édifice se serait super. De mon époque, le début d'internet, on partagait tout, mais vraiment tout. Dès qu'un pote (car on se connaissais tous au début), apprenait un nouveau truc, il fesait un tutoriel.

                Maintenant, tout le monde prend et ne donne rien du tout. Du coup, le savoir est dispersé de ci-de-là, et il faut soit acheter des ebooks par dizaine, soit lire des dizaines de blogues pour apprendre deux trucs.

                Là j'ai la fnac qui m'a tel, j'ai recus deux livres en dur 2015 sur la sécurité, deux ebooks qui sont introuvables et surtout complets sur des techniques 2015 et futur 2016. Je ne les partagerais pas, (je n'ai plus de scan valide) et surtout à 60 euros l'un disons que voila quoi. Mais, j'essairais de partager ce que j'apprendrais d'interressant et de nouveau au travers de l'ouvrage.

                Commentaire


                • #9
                  @Dreamus Voila maintenant deux ans que je m'intéresse au monde du hacking et plus particulièrement à la sécurité informatique.

                  Aujourd'hui je peu dire qu'Hackademics est l'une des meilleures rencontres que j'ai pu faire sur Internet.

                  J'ai lu énormément d'articles concernant le hacking, du "comment devenir hacker" à "hacker un réseau wifi", j'ai toujours

                  voulu en savoir plus, sans jamais pouvoir contribuer. De nos jours apprendre coûte chère, et les dizaines de livres que j'ai accumuler sur

                  divers branches de la sécurité informatique m'ont coutés plus de 500€ l'année dernière. J'ai décidé d'arrêter d'acheter pour apprendre, car

                  je lisais ces ouvrages sans aller au délà ou même pratiquer les exemples qui étaient présentés. Et c'est là la clé du hacking, faire pour apprendre,

                  comprendre pour faire, et je peu vous dire que même en lisant des centaines de tuto' sur Internet je me sens toujours aussi ignorant qu'au début de mon apprentissage.

                  Je ne dis pas que je n'ai rien n'appris, biensûre ces nombreuses heures de lecture m'ont apportées des connaissances dans le domaine du hacking, cependant elles ne m'ont pas

                  appris a me débrouiller seul, aller au délà des notions présentés, tout simplement, l'éthique du hacker, et c'est là le problème.

                  En ce moment, je m'intéresse au reverse engineering ainsi qu'au wifi, au lieu d'acheter des livres, j'ai décidé de télécharger les 2400 pages de la norme IEEE 802.11 pour comprendre

                  comment le tout fonctionne, de même pour le reverse, j'ai trouvé un ensemble de vidéos géniales qui introduisent le sujet.

                  Le hacking ne s'apprend pas du jour au lendemain, c'est un long apprentissage qui demande des années et des années, et je comprend que les plus jeunes d'entre nous n'ont pas encore

                  eu le temps d'accumuler assez de connaissances pour proposer un contenu nouveau et innovant sur le monde du hacking.

                  Pour en revenir au forum, il est une base nécessaire à l'initiation au monde du hacking, sans cette base, les nouveaux membres n'auraient aucuns points de répères et pourraient tomber

                  dans le côté black hat de la chose, ou rester script kiddies sans support pour évoluer. Il est donc indispensable de proposer un contenu qui introduit les régles de bases et le chemin

                  a suivre pour éspérer un jour devenir un hacker. L'échanges avec un autre hacker vaut 100x plus que la lecture du sujet lambda sur le hacking, Hackademics propose un mini chat pour échanger avec

                  les autres membres, vous pourrez aussi trouver votre bonheur sur les canuax IRC. On a tous la vision de l'ado' qui reste enfermer dans sa chambre a tappé comme un barge sur son clavier avec un

                  terminal et des commandes qui défiles à toutes vitesse pour finir sur un [ ROOT ACCESS ] .

                  Vous n'êtes pas tout seul, il suffit de chercher, avec un peu de chance votre ville dispose d'un hackerspace qui est un lieu formidable pour faire de nouvelles rencontres, à Toulouse, nous

                  avons le Tetalab, je ne m'y suis encore jamais rendu, mais se n'est pas l'envie qui manque.

                  Si vous avez la chance de pouvoir aller sur Paris cet été, ne ratez pas la NUIT DU HACK, cette année est la première ou je vais pouvoir m'y rendre et se serait un plaisir pour moi

                  d'y rencontrer des membres d'Hackademics !

                  Je m'efforcerais de faire partager mes expériences avec vous, et j'éspère que ce petit pavé vous aura donné quelques idées pour la suite.

                  ~ Merci de m'avoir lu
                  deux et deux font cinq

                  Commentaire


                  • #10
                    Merci

                    pour ce qui est scripts kiddies, il faut différencier celui qui va utiliser des scripts tout prêts de celui qui va utiliser des scripts tout prêts. Je m'entends par là que pour contourner une sécurité, l'un va utiliser un script tout prêt, pourquoi pas ? Il est là non ? La plupart des spécialistes en sécu utilisent des scripts existants.

                    Mais l'autre va le faire sans comprendre juste car il a lu un tuto, il ne saura pas le modifier si il le faut en cas de déroute.

                    Maintenant, j'ai vu sur des CTF de génie des experts qui créent les scripts nécessaire à des challenges dont aucun ne pourraient s'imaginer la complexité, il faut être aguerris en tout, je dit bien tous les domaines. Et savoir parler au moins 4 langages informatiques parfaitement.

                    Les gars fabriquent des outils incroyable codé mano en C, C++,Delphie, python,... pour passer les cap, le tout finis sur des révisions d'audit de plus de 80 pages, c'est incroyable, moi-même je n'aurait pas réussis à passer ne serait ce que la compréhension du problème initiale.

                    C'est ce but que je recherche, en apprenant actuellement les parties plus complexes de la sécurité : cryptologie, reverse, mémoire, réseau data,... Il faut que je me dépêche avant d'être trop sénile hahahaha

                    Commentaire


                    • #11
                      Bonjour à tous,

                      Shirocen, je confirme pour les moocs de OpenSecurityTraining. J'ai fini leur formation au langage assembleur X86, et c'est très bien expliqué et complet, tout en étant synthétique. Alors bon courage à ceux qui s'y lance, ça vaut le coup !

                      Après vérifications, fred a parfaitement raison et on parle bien d'octet de poids fort ainsi que d'octet de poids faible
                      On peut parler de bit ET/OU d'octet de poids fort/faible. Cependant, on s'intéresse plus souvent au bit, ma formation en programmation embarquée et électronique numérique me l'assure.

                      Bonne journée


                      PS: @Dreamus ils ont un cours de reverse engineering ici.
                      Cependant ils conseillent d'abords d'avoir suivi le cours d'assembleur x86 et de "life of binairies", comme l'indique leur schéma :


                      Si quelqu'un se lance dans l'aventure, je serais curieux d'en avoir des retours.

                      Malheureusement pas de HackerSpace sur Nantes. @Shirocen, quels cannaux IRC conseillerais-tu ?
                      Dernière modification par bilboy69, 08 février 2016, 15h03.

                      Commentaire


                      • #12
                        Merci pour le lien, je vais suivre cette formation à côté de ce que j'ai apprendre car faut que j'accuse autant d'information hihihi Sympas les gars, je vais m'y mettre

                        Je ferais un retour au détour d'un autre poste lorsque j'aurais finis les premières parties. Je pense qu'il est plus enrichissant de créer un poste sur les formations en cours pour s'entraider là où l'on n'aurait pas compris.

                        J'y pensé depuis peu, mais c'est une idée interressante. Si vous faite par exemple une formation CEH via pro ou internet, de mettre vos progressions, vos difficultées, cela permettra d'évoluer en même temps et de dénouer les parties obscures ou indéfinies des formations.

                        Donc, dès que j'aurais passé quelques passes dessus , je ferais un poste sur cette formation où l'on s'indiquera nos progrès.

                        A plus les gars

                        Commentaire


                        • #13
                          On peut parler de bit ET/OU d'octet de poids fort/faible. Cependant, on s'intéresse plus souvent au bit, ma formation en programmation embarquée et électronique numérique me l'assure.
                          Seulement dans cet exemple, on a un entier représentant plusieurs octets... donc on recherche l'octet de poids fort ou faible (MSB ou LSB)

                          Dans le cas d'un seul octet, oui on parle d'un bit de poids fort ou faible (msb ou lsb)

                          Remarquez la nuance au niveau de la casse des appellations entre parenthèses.

                          Commentaire


                          • #14
                            ( Ce poste est une refonte du post précédent qui comportait de nombreuses maladresses )


                            Problématique : Qu'est ce que le big endian et le little endian ?


                            Le processeur de nos ordinateurs travaillent exclusivement avec la RAM, le disque dur étant bien trop lent,

                            les informations du disque dur sont donc chargées dans la RAM avant de pouvoir être utilisées par le processeur.

                            Le big endian ainsi que le little endian sont des termes qui désignent la manière dont l'information va être stockée dans la RAM.

                            /!\ 1 OCTET PAR ADRESSE /!\ -> (int -> 4 octets / 4 adresses, char -> 1 octet / 1 adresse..)

                            On parle d' "orientation big endian ou little endian" pour désigner la manière dont l'informations va être disposée, sachez qu'il

                            en existe deux autres : Middle-endian,Bi-endian, qui ne seront pas traitées ici.

                            Lorsqu'on utilise l'orientation "big endian" :

                            - On se placera de manière a se que le bit avec le poids le plus faible soit situé dans l'adresse la plus haute.

                            Exemple : Prenons pour valeur 0x1234, ici, le bit le plus faible compose 4 -> 010[ 0 ]

                            Cet octet est disposé dans l'adresse mémoire la plus haute, l'octet qui suit viendra se mettre à la suite :

                            rect3013.png

                            Il suffit donc d'écrire nos octets comme si nous le faisions à la main dans la RAM.

                            Cette architecture est utilisée dans les processeurs ARM.

                            Lorsqu'on utilise l'orientation "little endian", c'est le contraire :

                            - On se placera de manière a se que le bit avec le poids le plus fort soit situé dans l'adresse la plus haute.

                            Exemple : Prenons pour valeur 0x1234, ici, le bit le plus fort compose 1 -> [ 0 ]001

                            Cet octet est disposé dans l'adresse mémoire la plus haute, l'octet qui suit viendra se mettre à la suite :

                            rect3023.png

                            Cette écriture est bien moins naturel cependant, elle respecte mieux la notation binaire.

                            Cette architecture est utilisée dans les processeurs INTEL.

                            Si vous avez eu la chance d'avoir fais un peu de C, vous savez lire la RAM et la manipulée (Aller voir les cours de fred' sinon !!! ),

                            je vous propose un petit programme pour tester si vous êtes plutôt big ou little :s :

                            Code:
                            #include <stdio.h>
                            
                            int main(int argc, char *argv[]) 
                            {
                            
                            	int i = 1;
                            
                            	printf("\n\n-->%d\n\n",*(char *)&i);
                            
                            	return 0;
                            }
                            Si vous obtenez un 1, vous êtes little, sinon, c'est le big qui l'emporte. Référrez vous aux explications ci-dessus pour bien comprendre

                            comment le tout fonctionne, le programme ne devrait pas être une barrière il permet juste d'insérer un 1 en mémoire, et de lire son premier octet

                            grâce a un pointeur sur char, sur ce ~ Merci de m'avoir lu.
                            Dernière modification par shirocen, 09 février 2016, 18h14.
                            deux et deux font cinq

                            Commentaire


                            • #15
                              Une erreur dans ton raisonnemment :
                              Lorsqu'on utilise l'orientation "big endian" :

                              - On se placera de manière a se que le bit avec le poids le plus faible soit situé dans l'adresse la plus haute.
                              Ce ne serais pas plutôt :

                              Lorsqu'on utilise l'orientation "big endian" :

                              - On se placera de manière a ce que l'octet de poids fort soit situé dans l'adresse la plus basse.

                              et vice versa ?

                              Autre chose, l'analogie entre les deux et nos processeurs se situent comment ? Je veux dire dans le cadre d'un Pc 32 bit, ou d'un OS différent ? Cela aurait été bien de savoir comment il se comporte devant un MAC,... un réseau ?

                              Commentaire

                              Chargement...
                              X