题目不多讲,直接贴代码,如果不会这些个过程看前面教程
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(int key){
char overflowme[32];
printf("overflow me : ");
gets(overflowme); // smash me!
if(key == 0xcafebabe){
system("/bin/sh");
}
else{
printf("Nah..\n");
}
}
int main(int argc, char* argv[]){
func(0xdeadbeef);
return 0;
}
题目看上去很简单,实际上也不难,只要我们懂点知识,栈溢出的知识,
临时变量存放地点(char overflowme[32]) |
ebp存放地点(栈底,函数执行都要保存栈底) |
call返回地址存放地点(方便执行下一条指令) |
形参存放地点(key) |