记录一个简单的栈溢出的实例,具体的分析以后加进去。
程序源代码buffer.c:
#include <stdio.h>
#include <string.h>
void fun1(char *input)
{
char buffer[10];
strcpy(buffer,input);
printf("Call fun1,buffer=%s ",buffer);
}
void fun2()
{
printf("Call fun2");
}
int main(int argc, char *argv[])
{
printf("Address Of fun2=%p ",fun2);
fun1("0000000000000000000000x79x84x04x08");
return 0;
}
Linux编译命令:
1 首先关闭Linux系统的ASLR(地址随机化保护机制)
sudo sysctl -w kernel.randomize_va_space=0
2 使用gcc关闭栈保护机制进行编译
gcc -fno-stack-protector -o buffer buffer.c
3 生成汇编码查看
gcc -fno-stack-protector -S buffer.c
4 运行查看
./buffer