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?