[英]Can't exploit stack overflow
我正在学习缓冲区溢出,而利用基于堆栈的缓冲区溢出存在问题。 这是我的程序:
#include <stdio.h>
void func(){
printf("asd");
}
main(){
char buf[10];
scanf("%s", &buf);
}
我正在用A(缓冲区和旧的EIP地址)覆盖前14个字节。 我的目标是执行func函数,或使用其地址更改EIP。 但是我总是得到非法指导。 我已经检查了函数的十六进制地址; 我写的顺序相反,它们是正确的。
您将不得不在汇编器中查看编译后的代码,例如,main()可能类似于:
char buf[10];
scanf("%s", &buf);
00D7B938 mov esi,esp
00D7B93A lea eax,[ebp-14h]
00D7B93D push eax
00D7B93E push offset string "%s" (0D818D4h)
00D7B943 call dword ptr [__imp__scanf (0D89684h)]
此时,您必须进行调试以查看堆栈中实际包含的内容,例如,如果您在调试中进行编译,则堆栈中很有可能比您想象的要多!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.