begin process at 2010 02 09 21:40:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Processeurs

 > 

X86

 > 

Aide à la compréhension d'un code


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Aide à la compréhension d'un code

lundi 9 juin 2008 à 18:03:53 | Aide à la compréhension d'un code

mmaximum

Bonjour,
J'ai un code(ci-dessous) mais je n'ai jamais fais d'assembleur et je ne comprend pas tout.
Je connais le C,C++,python, et ca n'a pas l'aire de ressembler et je suis totalement perdu.
Ce code est extrait du loader de SOS(Simple Operating System).
Est-ce que quelqu'un pourrait m'expliquer ligne par ligne ce que ca fait?
Si jamais ca vous prend trop de temps, dites moi au moins un tutoriel pour apprendre l'assembleur.


/* Copyright (C) 1999  Free Software Foundation, Inc.

   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License
   as published by the Free Software Foundation; either version 2
   of the License, or (at your option) any later version.
  
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
  
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
   USA.
*/

   
/* The operating system is booted by Grub, so we almost have nothing
   to do to boot it. We only have to conform to the Multiboot
   standard, as defined by the Grub documentation */
   
#define ASM 1
/* The multiboot.h header contains a lot of multiboot standard
   definitions */
#include "multiboot.h"

    /* The multiboot header itself. It must come first. */
.section ".multiboot"
    /* Multiboot header must be aligned on a 4-byte boundary */
    .align 4
multiboot_header:
  /* magic=        */ .long MULTIBOOT_HEADER_MAGIC
  /* flags=        */ .long MULTIBOOT_HEADER_FLAGS
  /* checksum=     */ .long -(MULTIBOOT_HEADER_MAGIC \
                              +MULTIBOOT_HEADER_FLAGS)
  /* header_addr=  */ .long multiboot_header
  /* load_addr=    */ .long __b_kernel
  /* load_end_addr=*/ .long __e_load
  /* bss_end_addr= */ .long __e_kernel
  /* entry_addr=   */ .long multiboot_entry
   
/* Here is the beginning of the code of our operating system */
.text

.globl start, _start
start:
_start:
multiboot_entry:
    /* Set up a stack */
    movl $(stack + MULTIBOOT_STACK_SIZE), %ebp
    movl %ebp, %esp

    /* Set EFLAGS to 0 */
    pushl $0
    popf

    /* Push the magic and the address on the stack, so that they
    will be the parameters of the cmain function */
    pushl %ebx
    pushl %eax

    /* Call the cmain function (os.c) */
    call EXT_C(sos_main)

    /* Should never get there */
loop:
    hlt
    jmp loop

    /* Here is the stack */
.comm    stack, MULTIBOOT_STACK_SIZE


Merci d'avance, mmaximum
mercredi 11 juin 2008 à 16:16:20 | Re : Aide à la compréhension d'un code

patatalo

Membre Club Administrateur CodeS-SourceS

salut,

ça met le registre ebp en sommet de pile (defini dans multiboot.h) , ça met le registre des flags a 0, ça push The Magic and the adresse on the stack puis ça appelle la fonction sos_main().

voilà,

@++

mardi 9 septembre 2008 à 18:39:39 | Re : Aide à la compréhension d'un code

ToutEnMasm

Salut,
Pour y voir clair , on doit connaître le format de fichier PE
http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx
chercher magic dans le document et on voit mieux ce que le programme charge.
samedi 29 novembre 2008 à 16:57:50 | Re : Aide à la compréhension d'un code

ghuysmans99

Membre Club
Euh pas d'accord.
Ce sont les specs de grub pour avoir un kernel multiboot
[ Lien ]
http://img404.imageshack.us/img404/7166/signaturegf4.gif
samedi 29 novembre 2008 à 17:00:03 | Re : Aide à la compréhension d'un code

ghuysmans99

Membre Club
Pour info, c'est le format ELF dans de cas.
http://img404.imageshack.us/img404/7166/signaturegf4.gif


Cette discussion est classée dans : long, header, of, stack, multiboot


Répondre à ce message

Sujets en rapport avec ce message

[NASM] context stack [ par littlefl ] C'est un bug ou c'est moi ? Parce-que dans la doc de NASM, il est écrit que les defines spécifiques au context stack ont leur nom précédé de %$ et que Différence entre stack et heap [ par Stormy ] salut à tous,Quelqu'un aurait-il la gentillesse de m'expliquer la différence entre la pile (stack) et le tas (heap). Je sais que le tas alloue une mém Stack [ par AlexMAN ] Bonsoir, Je me pose une kestion :Si au debut d'une fonction, je fais : lea edx, [esp - 32]mov esp, edxcall CreateRectRgnOn est d'accord, la pile est r PIC: long call et table [ par flagyg ] Bonjour,J'appelle une table qui se trouve à l'adresse 0x700 depuis ~0x20. J'ai remarqué que ça ne jouait plus car la table me renvoie nimporte ou dans Récupération des flags du processeur [ par Oeil_de_taupe ] Bonjour,J'ai essayé, après avoir lu beaucoup de théorie sur l'assembleur sur X86, de faire un programme qui utilise les flags d'information du process


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,484 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales