orden de variables bss

0

Quiero controlar el puntero de una función en el segmento bss, tengo un búfer para ese propósito, pero no puedo ubicarlo antes del puntero de la función.

#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);
}

Aquí puede ver la dirección de los miembros de datos estáticos que declaré y cómo se establece el puntero antes del búfer sin importar el orden de invocación en el código.

¿Cuál es la forma correcta de establecer el puntero en la memoria sobre el búfer para crear un programa vulnerable?

    
pregunta Yvain 05.01.2017 - 17:44
fuente

0 respuestas

Lea otras preguntas en las etiquetas