ordinamento di variabili bss

0

Voglio controllare un puntatore a funzione nel segmento bss, ho un buffer a tale scopo ma non riesco a metterlo prima il puntatore della funzione.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void show(char *);//text

int main(int argc, char *argv[]){
    static char buff[100];//bss
    static void (*func_ptr) (char *arg);//bss
    func_ptr = show;
    strcpy(buff, argv[1]);
    //now the function pointer is overwriten in case of buffer overflow
    printf("buffer at %p\t pointer to %p\n", buff, *func_ptr);
    func_ptr(buff);
    return 0;
}
void show(char *arg){
    printf("%s\n", arg);
}

Qui puoi vedere l'indirizzo dei membri dei dati statici che ho dichiarato e il modo in cui il puntatore viene impostato prima del buffer, indipendentemente dal loro ordine di chiamata nel codice.

Qual è il modo corretto di impostare il puntatore in memoria sopra il buffer, al fine di creare un programma vulnerabile?

    
posta Yvain 05.01.2017 - 17:44
fonte

0 risposte

Leggi altre domande sui tag