• [^] # Re: Re:Sécurité ?

    Posté par (Mastodon) . En réponse à la dépêche Un nouveau serveur httpd : Ashd, A Sane HTTP Daemon. Évalué à 3.

    Non, la variable statique doit être dans une zone .bss. Elle ne prend pas de place dans le binaire, mais une fois qu'il est chargé, elle prend toute la place dès le début.

    Par exemple :
    $ cat test.c
    #include <stdio.h>

    static char *attrmimetype(char *str)
    {
    static char buf[1024];
    sprintf(buf, str);
    return buf;
    }

    int main(int argc, char * argv[]) {

    if (atoi(argv[1]) == 42) {
    char * plop;
    plop = attrmimetype("toto0円");
    printf(plop);
    printf("\n");
    }

    return 0;
    }

    $ gcc -DSIZE=1024 -O0 -o test.1024 test.c
    $ gcc -DSIZE=1 -O0 -o test.1 test.c
    $ readelf -S test.1024 test.1 |grep bss -A1
    [24] .bss NOBITS 00000000005009c0 000009a8
    0000000000000420 0000000000000000 WA 0 0 32
    --
    [24] .bss NOBITS 00000000005009a8 000009a8
    0000000000000008 0000000000000000 WA 0 0 4

    La longueur du .bss (alloué au chargement) passe de 0x420 à 0x8 en changeant la variable de 1024 octets à 1. (je n'ai pas cherché à comprendre pourquoi le gain de place est plus grand que 1024, probablement un alignement ?)

    Tous les nombres premiers sont impairs, sauf un. Tous les nombres premiers sont impairs, sauf deux.