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?