C言語でbuffer overrun
お呼びでない関数を実行する。
overrun.c
#include <stdio.h>
#include <stdlib.h>
void goast(void)
{
printf("Boo!\n");
}
void dummy(void)
{
char a[1] = {0};
a[9] = &goast;
}
int main(void)
{
dummy();
return 0;
}
実行例
$ gcc overrun.c
overrun.c: In function 'dummy':
overrun.c:13: warning: assignment makes integer from pointer without a cast
$ ./a.out
Boo!
Segmentation fault
コメント