liens.txt 7.49 KB


//////////////////////////////////       exercice : piste noire           ///////////////////////////////////

en assembleur cela fonctionne __asm__ volatile("syscall" :: "a" (60), "D" (42) );

Avec readelf on voit qu'on utilise pas de bibliotheque et il n'utilise que 6 sections

pcwik@gambrinus14:~/Desktop/pierrotc/liens$ ldd minimal
        not a dynamic executable



////////////////////////////////////      exercice "épilogue"                  //////////////////////////////


l'executable n'a plus que 2 sections

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .text             PROGBITS         00000000004000b0  000000b0
       0000000000000014  0000000000000000  AX       0     0     1
  [ 2] .shstrtab         STRTAB           0000000000000000  000000c4
       0000000000000011  0000000000000000           0     0     1



EDITION DES LIENS 2/5

///////////////////////////////////   Exercice  "segment pour constante"     /////////////////////////////////////::


void _start(void)
{

char *chaine = "salut";
int i=0;

while(chaine[i] != '\0') { i++; }
  
__asm__ volatile("syscall" :: "a" (60), "D" (i) );


}

AVEC LE  PROGRAMME CI DESSUS j'OBTIENT LES SECTIONS CI DESSOUS :

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .text             PROGBITS         00000000004000b0  000000b0
       000000000000003b  0000000000000000  AX       0     0     1
  [ 2] .rodata           PROGBITS         00000000004000eb  000000eb
       0000000000000006  0000000000000000   A       0     0     1
  [ 3] .shstrtab         STRTAB           0000000000000000  000000f1
       0000000000000019  0000000000000000           0     0     1

       
//////////////////////////////////////////////////Exercice "segment pour variable globale initialisée" ////////////////////////////////


int j = 42;

void _start(void)
{
  
__asm__ volatile("syscall" :: "a" (60), "D" (j) );


}

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .text             PROGBITS         00000000004000b0  000000b0
       0000000000000014  0000000000000000  AX       0     0     1
  [ 2] .shstrtab         STRTAB           0000000000000000  000000c4
       0000000000000011  0000000000000000           0     0     1


///////////////////////////////////////////////////:: STATIQUE ///////////////////////////////////////////////////::

void _start(void)

{
  
static int i;

__asm__ volatile("syscall" :: "a" (60), "D" (i) );


}



Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000                                                                          
       0000000000000000  0000000000000000           0     0     0                                                                             
  [ 1] .text             PROGBITS         00000000004000e8  000000e8                                                                          
       0000000000000015  0000000000000000  AX       0     0     1                                                                             
  [ 2] .bss              NOBITS           0000000000600100  00000100
       0000000000000008  0000000000000000  WA       0     0     4
  [ 3] .shstrtab         STRTAB           0000000000000000  000000fd
       0000000000000016  0000000000000000           0     0     1


       
 ////////////////////////////////////////////////////////// "zone mémoire allouée pour la pile" //////////////////////
 
 
 On voit que le prog n'alloue aucune place dans la pile lorsqu'il n'est pas executé :
 
 GNU_STACK      0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000000 0x0000000000000000  RW     10

                 
 Mais lorsqu'il est executé il alloue de la memoire dans la pile :
 
 00400000-00401000 r-xp 00000000 00:23 47981511                           /home/apima3/pcwik/Desktop/pierrotc/opti/liens/pile
7ffcc0f0d000-7ffcc0f2e000 rw-p 00000000 00:00 0                          [stack]     <------- ICI ADRESSE DE DEBUT ET ADRESSE DE FIN DIFFERENTES
7ffcc0fd5000-7ffcc0fd7000 r-xp 00000000 00:00 0                          [vdso]
7ffcc0fd7000-7ffcc0fd9000 r--p 00000000 00:00 0                          [vvar]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]


//////////////////////////////////////////// "zone mémoire allouée pour le tas"  ///////////////////////////////////////////////


ici on voit qu'un emplacement est alloué pour le tas 

00400000-00401000 r-xp 00000000 00:23 47978600                           /home/apima3/pcwik/Desktop/pierrotc/opti/liens/tas
00600000-00601000 rw-p 00000000 00:23 47978600                           /home/apima3/pcwik/Desktop/pierrotc/opti/liens/tas
00838000-00859000 rw-p 00000000 00:00 0                                  [heap]
7f97cf85c000-7f97cf9fe000 r-xp 00000000 08:01 1314756                    /lib/x86_64-linux-gnu/libc-2.19.so
7f97cf9fe000-7f97cfbfd000 ---p 001a2000 08:01 1314756                    /lib/x86_64-linux-gnu/libc-2.19.so
7f97cfbfd000-7f97cfc01000 r--p 001a1000 08:01 1314756                    /lib/x86_64-linux-gnu/libc-2.19.so
7f97cfc01000-7f97cfc03000 rw-p 001a5000 08:01 1314756                    /lib/x86_64-linux-gnu/libc-2.19.so
7f97cfc03000-7f97cfc07000 rw-p 00000000 00:00 0 
7f97cfc07000-7f97cfc27000 r-xp 00000000 08:01 1311215                    /lib/x86_64-linux-gnu/ld-2.19.so
7f97cfdf5000-7f97cfdf8000 rw-p 00000000 00:00 0                                                                                               
7f97cfe24000-7f97cfe27000 rw-p 00000000 00:00 0                                                                                               
7f97cfe27000-7f97cfe28000 r--p 00020000 08:01 1311215                    /lib/x86_64-linux-gnu/ld-2.19.so                                     
7f97cfe28000-7f97cfe29000 rw-p 00021000 08:01 1311215                    /lib/x86_64-linux-gnu/ld-2.19.so                                     
7f97cfe29000-7f97cfe2a000 rw-p 00000000 00:00 0 
7ffe7f9ef000-7ffe7fa10000 rw-p 00000000 00:00 0                          [stack]
7ffe7fb9f000-7ffe7fba1000 r-xp 00000000 00:00 0                          [vdso]
7ffe7fba1000-7ffe7fba3000 r--p 00000000 00:00 0                          [vvar]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]




///////////////////////////////////////////////////// exercice programme sans main  //////////////////////////////////////////////////////


/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/crt1.o : Dans la fonction « _start » :
/build/glibc-h_iKOs/glibc-2.19/csu/../sysdeps/x86_64/start.S:118 : référence indéfinie vers « main »
collect2: error: ld returned 1 exit status

////////////////////////////// compilation separee ////////////////////////////

a été effectuée

le sens n'importe pas